на сайте происходит забавная штука. время везде хранится и создается в utc, однако 29 числа происходит хренотень периодически оказываю поддержку проекту по бронированию квестов - на сайте есть список дней в котором выводится время для бронирования по дням, время в данном случае у всех дней одинаковое итак - отображаемое на сайте время все верное возьмем к примеру время 12.45 28 числа это 45900 + 1509141600 - бронирование происходит верно. 29 числа это 45900 + 1509228000 - при бронировании время брони создается на час назад 30 число это 45900 + 1509318000 - бронирования происходит верно все остальные дни тоже верно временная зона стоит Europe/Madrid ajax-ом отправляю данные формы (время и дату) и в php уже создаю время для проверки проверяю так PHP: $iDate = F::GetRequestStr('time') + F::GetRequestStr('date'); return date('d-m-Y H:i, $iDate); получаю 11.45 попробовал вот так PHP: $iDate = new DateTime(); $iDate->setTimestamp(F::GetRequestStr('time') + F::GetRequestStr('date')); return $iDate->format('d-m-Y H:i'); получаю 11.45 и дополнительно на всякий случай устанавливал setTimezone('Europe/Madrid') и все-равно каждый раз 29 числа я получаю 11.45 где же копать?
Всё правильно. Слышали о переводе времени? Так вот часовой пояс: Europe/Madrid в воскресенье 29 октябрь 2017 в 03:00 утра переводит время на зимнее, то есть на 1 час назад.
Я с этим не сталкивался, если честно. Знаю только, что если складывать даты как строки, то должно работать. Примерно так: PHP: $date = date('d-m-Y H:i', 1509228000); $timestamp = strtotime("$date + 12 hours 45 minutes"); echo date('d-m-Y H:i', $timestamp); Может получится дальше мысль развить.
Проблема в том, что вы записывается (вероятно) время не в UTC, а местное время в поле, для которого установлено UTC. То есть когда клиент бронирует на 13 часов по Мадриду, вы пишите в базу - 13 часов. А следует конвертировать эти 13 часов в UTC, т.е. в летний период в БД записывать 14 часов. --- Добавлено --- --- Добавлено --- https://www.opennet.ru/tips/1810_timezone_date_time.shtml
@rewuxiin если у тебя еще нет реализации, то я рекомендую тебе хранить время в unix timestamp, а получать его с помощью функции mktime() по данным из формы. Эта функция опирается default_timezone в твоём php. Если ты будешь получать timestamp в ней, а вывод на экран форматировать с помощью date(), то не будет никаких проблем.
[vs], я алень, я не правильно описал, оно у меня и хранится все в timestamp. и как видно из примера - приходит из формы тоже в timestamp Но при вызове date или DateTime - выходит вот эта херотень. а вот это да, возможно поможет. нужно подумать.