Как выяснить причину расхождения по времени?

Здравствуйте, нужна ваша помощь. Есть проект на yii2 (достался в наследство), по сути представляет интерфейс для выборки из БД записей. Есть несколько сортировок вроде выбора записей по дате и т.п. (виджет yii2-kartik-datepicker что-то там). В базе информация о дате хранится в виде unixtime, поле типа integer.

Собственно причина, почему здесь пишу. Раньше это работало на одном сервере (VPS Ubuntu 16.04, PHP 7.0(.25), MariaDB 5.5, Apache 2.4 т.е. обычный LAMP), недавно пришлось это все перенести на новый сервер. VPS CentOS7, PHP 7.0(.28), база и вебсервер те же. И тут началось веселье. Записи в табличку стали выводиться почему- то с разницей +1 час (хотя хранящееся в unixtime формате время верное), если из виджета выбрать записи допустим за 20 число, записи показывает верно, но сам календарик ставится на 19 число. Думал промахнулся где-то с часовыми поясами, но нет:
date на обоих серверах выводит одинаковое время и дату
SELECT NOW() в БД выводиь одинаковое время
echo date('H:i:s'); выводит одинаковое время.

Файлы проекта не меняли, были скопированы rsync'ом и изменены в конфиге параметры доступа к БД. Уже все перерыл, где собака зарыта?
  • Вопрос задан
  • 281 просмотр
Решения вопроса 1
Скорее всего такие дела: если даты выводятся через Yii::$app->formatter, то он может выводить дату через ICU.
https://www.yiiframework.com/doc/guide/2.0/en/outp...
You can specify date and time formats using the ICU syntax. You can also use the PHP date() syntax with a prefix php: to differentiate it from ICU syntax.


У меня было так, что в системе стояла старая версия ICU и в ней был бардак с зимним/летним временем, как я понял. После обновления стало ок.
В другом случае обновиться не получилось, так как не было доступа к серверу, там переписал все даты на "PHP date() syntax", он выводился правильно
Ответ написан
Пригласить эксперта
Ответы на вопрос 2
@oxidmod
1. таймзоны
2. не стоит хранить время в целочисленных колонках
Ответ написан
Isolution666
@Isolution666
творческая личность
Я раньше тоже использовал date(); поэтому и расхождение во времени, date(); не подходит для ЗАПИСИ даты и времени. Для записи времени я использую time(); - на php7 работает отлично, старая версия mktime(); - есть риск что на сервере будут вылезать ошибки. Искать информацию этим плагином самое то, но записывать дату и время лучше с помощью time();
Если вы не в курсе, это дата в unix - формате.
php.net/manual/ru/function.time.php
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы