我有类似下面的代码
LocationController
public function updateDriverLocation($id, $lat, $lng)
{
$location = LocationModel::findOrFail($id);
$location->lat = $lat;
$location->lng = $lng;
$location->last_updated_at = now();
$location->save();
TimeHelper::checkArrival($id, $lat, $lng, $location->last_updated_at);
return $driverLocation;
}
TimeHelper
public static function checkArrival(int $id, $lat, $lng, $lastUpdatedAt)
{
if (!$lat || !$lng) {
return false;
}
if (strtotime(now()) - strtotime($lastUpdatedAt) > 900) {
return false;
}
$today = date('Y-m-d', strtotime("+ 9 hours"));
...
}
调用updateDriverLocation
时,now()
内的LocationController
返回与服务器时间一致的UTC时间,但是在TimeHelper
内,now()
返回本地化时间。我想知道这样做的原因。 (它也适用于date()
和strtotime()
之类的php函数)
我确实在Base.php中有很多类似的东西(每个模型都对其进行了扩展)。
public function get`some field name`Attribute($value)
{
return $this->getLocalizedTime($value); // custom private function
}
据我了解,它不会影响上述结果,因为它不仅会影响数据何时来自数据库,而且这种奇怪的行为甚至会发生在php函数上。
我想知道上述行为的原因,以及如何防止这种情况发生。任何意见或建议,将不胜感激。
谢谢。
答案 0 :(得分:0)
我认为您应该使用Carbon来更轻松地在Laravel中处理日期。 Carbon Docs
答案 1 :(得分:0)
作为注释中的eResourcesInc,在LocationModel内部,我有一些逻辑可以用本地时区覆盖UTC时区。所以我添加了一个代码,可以在完成任何逻辑后设置回UTC时区。