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 时间,但在 TimeHelper
、now()
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 时区。
我有如下代码
位置控制器
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 时间,但在 TimeHelper
、now()
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 时区。