time() выдает время на час больше системного

doran7

Новичок
Такое странное дело. Возьмем простой код для проверки:
PHP:
$date1 = date("d.m.y H:i", time());
echo $date1;
Сейчас у меня системное время компа 8:08, а указанный выше код выдает:
18.14.14 9:08

На компе ОС winXP, Денвер. Раньше все вроде нормально работало. Переход на летнее время отключен, синхронизация с сервером времени в интернете отключена.

Прошу корифеев помочь, куда копать, как устранить этот сбой.
 

Vladson

Сильнобухер
РНР не берёт (или криво берёт, не знаю) настройки настройки часового пояса, в php.ini можно настроить через
date.timezone = "часовой пояс"
список поддерживаемых часовых поясов в мануале есть http://www.php.net/manual/en/timezones.php
 

Absinthe

жожо
Кстати, советую обновить PHP до последней версии.
Придется снести старую операционку.
 

doran7

Новичок
Благодарю всех, кто откликнулся. Vladson, date.timezone в php.ini у меня закомментировано:
[Date]
; Defines the default timezone used by the date functions
;date.timezone =

Этот сбой у меня недавно проявился, до этого все нормально работало.
 

Vladson

Сильнобухер
Так вот если раскомментируешь и впишешь в кавычках свой пояс, то забудешь об этом глюке надолго (может даже навсегда)
 

AmdY

Пью пиво
Команда форума
не-не-не, оставь пустым и включи нормальный уровень ошибок, чтобы ругалось и ты никогда не забывал о времени и часовых зонах, которые могут отличаться не только для разных проектов, но и учитывать часовой пояс пользователя.
 

doran7

Новичок
Vladson, вписал:
[Date]
; Defines the default timezone used by the date functions
date.timezone = "Europe/Moscow"

Перезапустил Денвер и веб-браузер, но ничего не изменилось, код в первом посте выдает все то же самое.
 

peon

Lok'tar ogar
скинь сюда результат этого кода echo ini_get('date.timezone');
или установи параметр в коде ini_set('date.timezone', 'Europe/Moscow');
 

doran7

Новичок
peon,
echo ini_get('date.timezone');
выдает
Europe/Moscow

Делаю также
ini_set('date.timezone', 'Europe/Moscow');
$date1 = date("d.m.y H:i", time());
echo $date1.'<p>';

Но все по-прежнему.
 

Vladson

Сильнобухер
На компе то правильно часовой пояс стоит ? (может стоит другой какой-то, время показывает правильно потому что в Москве вроде часы не переводят, а РНР вычисляет относительно него)
 

doran7

Новичок
Благодарю всех, кто участвовал в обсужднии, особенно Absinthe и Vladson-а.

PHP старый, в PHP свои часовые пояса.
Похоже что именно так и есть. Проблему для себя решил методом банальной эрудиции. В php.ini прописал такое:
[Date]
; Defines the default timezone used by the date functions
;date.timezone = "Europe/Moscow" - чтобы помнить, как должно бы быть.
date.timezone = "Etc/GMT-3"


После этого время PHP стало совпадать со временем компа. У меня действительно старая версия PHP, не обновляю пока принципиально, хочется чтобы коды работали на любых серверах и со старыми версиями PHP. В старой версии PHP, имхо, еще забит переход на зимнее/летнее время для Europe/Moscow.
 

Absinthe

жожо
У меня действительно старая версия PHP, не обновляю пока принципиально, хочется чтобы коды работали на любых серверах и со старыми версиями PHP.
Навряд ли ты пишешь массовый продукт. Если ты его не пишешь, то тебе нужно писать под строго определенный сервер. Который всегда можно настроить под проект.
 

shureen

Милорд Лось Кристофер
Всем привет! Извиняюсь за некропостинг (хотя не такой уж и некро). Проблема аналогичная. Собственно 26 октября мы дружно перейдем на зимнее время. Проблема в следующем:
Имеем:
1) PHP 5.5.12
2) PHP 5.6.1 (или 5.6.0 есть обе)
Оба пыха собраны абсолютно одинаково и имеют одинаковые настройки.
У обоих стоит
Код:
date.timezone = "Europe/Moscow"
В системе (Ubuntu Server 14.04 с последними обновлениями если это важно) timezone тоже Europe/Moscow
Код:
$ cat /etc/timezone
Europe/Moscow
Установлена последняя актуальная версия tzdata (которая tzdata-h). Т.е. в ней зашит перевод времени 26 октября:
Код:
$ zdump -v Europe/Moscow | grep 2014
Europe/Moscow  Sat Oct 25 21:59:59 2014 UT = Sun Oct 26 01:59:59 2014 MSK isdst=0 gmtoff=14400
Europe/Moscow  Sat Oct 25 22:00:00 2014 UT = Sun Oct 26 01:00:00 2014 MSK isdst=0 gmtoff=10800

Собственно проблема в следующем: разные пыхи выдают разные даты у одного и того же timestamp если он после 26 октября 2:00, например:
1) PHP 5.5.12
Код:
$ php -r "echo date('r', 1415620800);"
Mon, 10 Nov 2014 16:00:00 +0400
2) PHP 5.6.1 (и 5.6.0)
Код:
$ php -r "echo date('r', 1415620800);"
Mon, 10 Nov 2014 15:00:00 +0300
при этом Mysql выдает:
Код:
mysql> SELECT @@global.time_zone, @@session.time_zone;
+--------------------+---------------------+
| @@global.time_zone | @@session.time_zone |
+--------------------+---------------------+
| SYSTEM             | SYSTEM              |
+--------------------+---------------------+
1 row in set (0.00 sec)

mysql> SELECT FROM_UNIXTIME(1415620800);
+---------------------------+
| FROM_UNIXTIME(1415620800) |
+---------------------------+
| 2014-11-10 15:00:00       |
+---------------------------+
1 row in set (0.01 sec)
Знаю что подобные проблемы были в старых версиях пыха и эта проблема была исправлена в 5.5.*, кто нибудь может объяснить как так и что делать? Pecl timezonedb не помогает. При этом на работе стоит php 5.3.13 там аналогичная проблема выскочила: пых со старым tzdata выдает 16:00, с новым 15:00. При этом со старым tzdata и с pecl timezonedb выдает так же 15:00, а mysql 16:00.
Голова взорвется скоро ( Коллеги, прошу помощи.
 

shureen

Милорд Лось Кристофер
По поводу 5.3.13 ввёл в заблуждение, на работе 5.3.3, в последней версии (5.3.29) всё норм. Остался вопрос про 5.6.1. Видимо разработка версий пыха идёт в параллель и баги поправленые в предыдущих версиях на более старшие со временем переносят только, что печально. Всё таки если есть у кого идеи, буду рад выслушать
 
Сверху