PHP / Laravel日期时间自动更改

时间:2018-12-11 11:30:38

标签: php laravel laravel-5 php-7

我有类似下面的代码

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函数上。

我想知道上述行为的原因,以及如何防止这种情况发生。任何意见或建议,将不胜感激。

谢谢。

2 个答案:

答案 0 :(得分:0)

我认为您应该使用Carbon来更轻松地在Laravel中处理日期。 Carbon Docs

答案 1 :(得分:0)

作为注释中的eResourcesInc,在LocationModel内部,我有一些逻辑可以用本地时区覆盖UTC时区。所以我添加了一个代码,可以在完成任何逻辑后设置回UTC时区。