Заказ Laravel по дате и времени - PullRequest
0 голосов
/ 04 июня 2018

Я упорядочиваю список событий по дате и времени, который работает нормально, однако возникает проблема, когда к некоторым элементам применен часовой пояс - они не упорядочены правильно.Например,

Событие 1 - заканчивается 20 июня 2018 года в 15:00:00 (Европа / Лондон)

Событие 2 - заканчивается 20 июня 2018 года в 13:00:00 (США / восток)

Когда они упорядочены по возрастанию даты, «Событие 2» показывает ДО «Событие 1», потому что часовой пояс игнорируется (когда в реальном времени это 2 часа спустя)

Я пытался использовать мутатор в Laravelчтобы преобразовать даты и время в временные метки:

 public function getDatetimeTzSecondsAttribute()
{
    $newDate = new Carbon($this->attributes['date_finish'], $this->attributes['timezone']);

    return $newDate->toTimeString();
}

Но следует понимать, что это не сработает, поскольку мутаторы обрабатываются после получения результатов.Я использую нумерацию страниц для результатов - каков наилучший способ упорядочить эти данные через построитель запросов / eloquent, если это возможно?

1 Ответ

0 голосов
/ 04 июня 2018

Если кому-то это поможет, я придумаю довольно простое решение после нескольких часов головной боли ...

Используйте функцию MySQL 'CONVERT_TZ', чтобы перейти с часового пояса на UTC:

->selectRaw('*, CONVERT_TZ(date_finish, timezone, \'UTC\') AS date_finish_converted ')

Затем упорядочите по новому преобразованному столбцу даты (если установлен) вместе со стандартным столбцом даты:

->orderByRaw('COALESCE(date_finish_converted, date_finish), date_finish');

Genius!:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...