datetime переходит на один час вперед при использовании метки времени unix с настройками localtime

#php #mysql #timezone #unix-timestamp

#php #mysql #Часовой пояс #unix-метка времени

Вопрос:

Во-первых, я хочу указать настройку времени моего сервера: 3 Европа / Стамбул и в php, который я использую

 date_default_timezone_set('Europe/Istanbul');
  

Я использую тип datetime в своей таблице mysql, когда я вставляю строку, она написана как 2011-10-01 15:16:09, это правильно, никаких проблем, но на стороне php, когда я запрашиваю и повторяю дату и время с помощью
echo strftime("%d %b %Y, %a %H:%M",strtotime(date("m/d/Y H:i",$data['UNIX_TIMESTAMP(date)'])));
я получаю время на один час вперед, например, 16: 16:09

я не понимаю, как это выяснить. Есть идеи?

Редактировать: при вставке строк, в которых я указываю дату в mysql, он не использует внутреннюю информацию о дате, такую как CURRENT_TIMESTAMP

Комментарии:

1. Какое значение находится в $data['UNIX_TIMESTAMP(date)'] ? 1317471369 ?

2. да @salathe это как 1317471369 Mysql преобразует дату и время в формат метки времени, поэтому я использую его в функции даты php для создания этой даты и времени. Но почему-то это дает один час вперед

3. но похоже ли это на 1317471369 или это на самом деле 1317471369?

4. Кроме того, почему вы переходите от метки времени unix к форматированной дате, к метке времени unix, к форматированной дате? Почему бы и нет strftime("…", $data[…]) ?

5. @salathe вы правы. Во-первых, я собирался сделать это, как ваше предложение, но я не хотел бороться с увеличением времени даты для форматирования, которое мне нужно 🙂 Иногда первое, что приходит на ум, — это правильный ответ 😉

Ответ №1:

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

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