2017-08-24 24 views
1

我试图找到我怎么能存储在我的数据库的时间值转换为“YYYY-MM-DD HH-MM-SS”一种解决办法,并给它的时区“美洲/洛杉矶。Laravel碳如何更改时区,而不改变小时

如果更改时区,碳会自动减去的时间,这是从UTC更改时间PST时会发生什么,但在我的DB的时间设置为PST时间为7个小时。例如,我希望时间是今天上午10点,但它会改变时区,碳会将它转换为今天凌晨3点。

我怎样才能使它在时区被改为PST,但仍保持时间上午10点?我需要一个API调用的时区,这就是为什么我需要这个想法。

+0

真是一团糟。这就是为什么所有的服务器和日期应该总是被配置/存储为UTC的原因。 – gview

+0

我的服务器设置为UTC,但我将日期存储为PST,因为我以前从未需要使用时区。 –

+0

如果你的日期时间字符串本身不包含时区,你应该能够简单地在你的'config/app.php'中改变''timezone'=>'UTC''声明。这将指示Carbon/DateTime默认解释该特定时区中的任何日期时间字符串,因此您不必每次都在所有Carbon实例上转换时区(这会更改日期和/或时间)。 –

回答

0

好吧,我想通了,做我想做的哑巴,但功能性的方式,和它的作品。

这里是我的代码:

 $dt = Carbon::parse($request->ShootDateTime)->timezone('America/Los_Angeles'); 
     $toDay = $dt->format('d'); 
     $toMonth = $dt->format('m'); 
     $toYear = $dt->format('Y'); 
     $dateUTC = Carbon::createFromDate($toYear, $toMonth, $toDay, 'UTC'); 
     $datePST = Carbon::createFromDate($toYear, $toMonth, $toDay, 'America/Los_Angeles'); 
     $difference = $dateUTC->diffInHours($datePST); 
     $date = $dt->addHours($difference); 

我得到我想要将转换为一个时区,并分析它,并改变时区的时间。然后我得到日,月和年,并创建2个不同的日期,两者都将读作00:00:00,但由于它们在这种情况下相隔7小时,所以它们只能是00:00: 00如果他们有7个小时不同的话,那就是我下一次捕获的东西。最后,我将最初的日期时间添加到它,并在合适的时区给我适当的时间。

这是丑陋的,但它的作品。