В php.inidate.timezone = Europe/Moscow; $date->getTimestamp() Показывает верно.
Cерверное время верное: Europe/Moscow # date Sat Apr 22 19:03:15 MSK 2017
Проверяю время базы: SELECT CURRENT_TIMESTAMP; Показывает верное.
В Ларавел app/config стоит - 'timezone' => 'Europe/Moscow',
Проверяю в Ларавел: Carbon\Carbon::now() Вероное!
Но если работают очереди и происходит ошибка, то в таблицу failed_jobs В поле failed_at пишет дату на 3 часа раньше. То есть например не 19:00 а 16:00
Почему!??
Я порос задал про дефолтную запись из коробки. Мне не нужно ничего прописывать, ошибки пишутся из ядра ларовел, из vendor. Это Laravel создает таблицу и поля для ошибок, а потом туда записывает.
chelkaz: timestamp - это стандарт, и он всегда пишется в UTC, вне зависимости от часового пояса.
Конвертация timestamp в "человеческий" формат с учетом часовых поясов происходит на бэкэнде в момент вывода, а не в момент записи в БД.
Так что ларавел все верно пишет. Время записывается в стандарте UTC, "по гринвичу".
Дело в том, что поле создается таким образом: $table->timestamp('failed_at')->useCurrent();
А как я понял useCurrent() Это SQL CURRENT_TIMESTAMP Которая у меня запросом: SELECT CURRENT_TIMESTAMP; Выводит верное время, так почему при записи не верное то?
Andrzej Wielski: Спасибо за timestamp - это стандарт, и он всегда пишется в UTC
Прочитал тут https://habrahabr.ru/post/273177/ Но не понятно, почему у меня тогда другие записи, созданные мной пишутся во времени верном, поле TIMESTAMP
Или вы имеете ввиду именно запись с CURRENT_TIMESTAMP будет в UTC ?