PHP/Laravel 日期时间自动更改

PHP/Laravel Datetime Automatically Changes

我有如下代码

位置控制器

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;
}

时间助手

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 returns 与服务器时间对齐的 UTC 时间,但在 TimeHelpernow() returns本地时间。我想知道它这样做的原因。 (它也适用于 php 函数,例如 date()strtotime()

我确实有很多像下面这样的 Base.php(每个模型都扩展了它)。

public function get`some field name`Attribute($value)
{
     return $this->getLocalizedTime($value); // custom private function
}

据我了解,它应该不会影响上面的结果,因为它不仅会影响数据何时来自数据库,而且这种奇怪的行为甚至会发生在 php 函数中。

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

提前谢谢你。

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

正如评论中的 eResourcesInc,在 LocationModel 中,我有一些逻辑可以用本地时区覆盖 UTC 时区。所以我添加了一个代码,在我完成任何逻辑后设置回 UTC 时区。