Здравствуйте, нужна ваша помощь. Есть проект на 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'ом и изменены в конфиге параметры доступа к БД. Уже все перерыл, где собака зарыта?
Minifets, а вот не понятно. В базе время хранится верно (если перевестит unixtime в читаемый вид), а вот при формировании таблички с данными время +1 час
Sha644 всегда ровно +1 час и всегда только при формировании таблички с данными. При этом 100% такой же код на старой виртуалке работает корректно. Любые другие сайты и прочие вещи показывают время корректно
Sha644, в коде проекта в config в main-local.php есть переменная timeZone , она установлена в Europe/Moscow, как и должна быть. но с ней на этом сервере время +1, пока что поставил Калининград, хотя бы время чтобы верно показывало.
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", он выводился правильно
Я раньше тоже использовал date(); поэтому и расхождение во времени, date(); не подходит для ЗАПИСИ даты и времени. Для записи времени я использую time(); - на php7 работает отлично, старая версия mktime(); - есть риск что на сервере будут вылезать ошибки. Искать информацию этим плагином самое то, но записывать дату и время лучше с помощью time();
Если вы не в курсе, это дата в unix - формате. php.net/manual/ru/function.time.php