PHP / Laravel Datetime автоматически изменяется - PullRequest
0 голосов
/ 11 декабря 2018

У меня есть код, подобный указанному ниже

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() возвращает локализованное время.Я хочу знать причину, почему это так.(Это относится и к функциям php, таким как date() и strtotime()) *

У меня есть много таких, как показано ниже в Base.php (И каждая модель расширяет его).

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

Насколько я понимаю, это не должно влиять на приведенный выше результат, потому что оно должно влиять не только на то, когда данные поступают из базы данных, а такое странное поведение происходит даже с функциями php.

Я хочу знать причинуза поведение, описанное выше, а также как предотвратить это.Любой совет или предложение будут оценены.

Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 12 декабря 2018

Как eResourcesInc в комментарии, внутри LocationModel у меня была логика, которая переопределяет часовой пояс UTC с локальным часовым поясом.Поэтому я добавил код, который устанавливает часовой пояс UTC после выполнения любой логики, которую я использовал.

0 голосов
/ 11 декабря 2018

Я думаю, вы должны использовать Carbon, чтобы работать с датами в Laravel намного проще. Carbon Docs

...