На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
Модераторы: Serafim, fatalist
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
    > Проблема со временем , PHP считает, что надо считать часы по зимнему времени
      Всем привет!

      Думаю, название темы с описанием говорит о сути вопроса. У меня Windows 7 Ultimate русское издание, PHP 5.2.17. Вообще-то, пишу Android-приложение для службы такси, тут уже светился с этим на форуме. Но оно не может работать без веб-сервиса, от которого должно принимать и отправлять данные. На рабочем сервере мне тестировать запрещено, поэтому поднял сайт у себя.

      Сегодня только что столкнулся с тем, что мой тестовый экипаж такси не отображается на карте, хоть и посылает состояние Свободен и текущие тестовые координаты где-то в центре города. Хотя утром еще все работало. Долго ковырялся, посылал те же данные из формы на сайте - тоже не успешно. В итоге обнаружил, что в одной из таблиц (а наверно, и во многих других) время последнего обновления данных значится на час вперед, a-la по зимнему времени. Посмотрел в phpinfo() - там значится Default timezone: Europe/Moscow. Помню, что проставлял это в php.ini. Директивы для задания/снятия перехода на зимнее время я не нашел в справке. Хотелось бы зону оставить, но так, чтобы переход на зимнее время убрался.

      Может, это и не есть корень зла, и отображение экипажа не работает по другой причине, но хотелось бы эту проблему со временем решить.

      Буду признателен за помощь!

      Добавлено
      Да, в виндах стоит московское время без перехода на зимнее.
        В PHP есть встроенная база данных времени. В ней содержится отношение зона+текущее время по UTC+текущее смещение от UTC. То есть она знает, что 27-го марта в Москве летнее время. А знает она потому, что создана была достаточно давно.

        Проблема усугубляется тем, что эта база вкомпилена в PHP, а PHP ветки 5.2 больше не поддерживается и обновлений для него не будет (емнип, обновление этой БД, затрагивающее МСК было осенью 2011-го, а PHP 5.2.17 вышел ещё весной).

        Варианты решения:
        1. можно попробовать найти более-менее новое расширение timezone (не уверен, что для windows оно есть - в некоторых юниксах есть в репозитории). Можно попробовать начать от сюда: http://pecl.php.net/package/timezonedb
        2. пересобрать PHP, взяв новую версию ext/date/lib/timezone*.*
        3. самое лучшее (хотя и не всегда возможно сделать быстро) обновить PHP.
        Сообщение отредактировано: negram -
          У меня до недавнего времени был PHP 5.3, потом совсем чуток попробовал на PHP 5.4. Откатился к PHP 5.2, потому что в более новом у меня не работал libcurl. Как выяснилось - из-за конфликта бинарников Apache, собранных в VC6, и бинарников самого PHP для двух последних версий, собранных в VC9 - модуль PHP просто сбаивал и перезагружался. Установка 5.2-версии это устранила.

          Наверно, все-таки лучше, из предложенных вариантов, полноценно портануться на 5.3 или 5.4. Для этого надо найти бинарники Apache, собранные в VC9, такие вроде бы где-то есть. Попробую уже завтра утром нарыть.
            Ээээ, а если поднимать на локалхосте, то зачем лишние геморы? Качаешь боянистый денвер и радуешься жизни
              Гм, ну привык уже как-то ставить Apache + PHP + MySQL по отдельности. Как-то поставил какую-то сборку (не денвер) - там проблема с кодировкой в MySQL была, СУБД вообще не запускалась, починить не удалось.
                Господа, нарыл на Apache Lounge билд Apache в VC10 ажно, там было сказано, что PHP в VC9 он тоже будет нормально грузить. PHP обновил до 5.4. В phpinfo() это видно, как и timezone Europe/Moscow. Но вызов echo date("H:i:s"); по-прежнему печатает по зимнему времени, то есть, на час больше!

                Добавлено
                Это уж злобно, билд-то PHP-февральский!

                Добавлено
                Гм, странно, после перезагрузки системы стал модуль PHP валиться. Наверно, надо все-таки апач в VC9 поставить...

                Добавлено
                Поставил бинарники Apache VC9 - просто переписал все файлы в папках bin и modules - сайты на локалхосте заработали намана. Ну теперь буду думать, как дальше траблу со временем решать, раз портирование на самую свежую версию PHP не помогло.
                  а date('r T') ?
                    Гм, все равно вдруг снова сайт на локалхосте начал валиться...

                    Добавлено
                    Цитата negram @

                    а date('r T') ?

                    Дает тоже на час больше, +4 MSK
                      Цитата Homez @
                      Дает тоже на час больше, +4 MSK
                      Так мы сейчас по этому времени и живем, разве нет?
                        Да вроде нет, перехода же на зимнее время больше нет.
                          Цитата Homez @
                          Да вроде нет, перехода же на зимнее время больше нет.
                          Нету, только отменили переходы именно в тот момент, когда мы находились на зимнем времени ;)

                          Добавлено
                          Или наоборот, отменили переход на летнее время, а не зимнее, я забыл, но усвоил, что теперь мы живем по +4 (а не +3 как раньше) :rolleyes:

                          Это было ИМХО, потому, что я уже сам запутался...

                          Добавлено
                          Вот у тебя сейчас сколько времени? Ты ведь по Московскому живешь?
                          У меня 14:40 (округлил) и при этом труба мне говорит, что живу я по GMT + 04:00 ;)
                            Может, труба у тебя старее, чем переход на зимнее время отменили? Я вообще-то думал, что GMT + 4 - это на час больше, зимнее время. У меня тоже эмулятор андроид думает, что московское время - это GMT +4. В результате пришлось поставить другой часовой пояс, чтобы было +3, тогда время стало показывать в эмуляторе правильно.

                            Добавлено
                            fatalist, может, Вы и правы. Но тогда получается, что это моя 7ая винда неправильно считает время? Там часовой пояс Москвы считается как GMT + 3. Получается, мне нужно поставить другой часовой пояс, где GMT + 4? Как решить-то эту проблему, чтобы больше ничего не слетело, особенно в даты, когда раньше время переводилось?

                            P.S. Да, подсиропил нам Медведев...
                            Сообщение отредактировано: Homez -
                              Откатился на PHP 5.2.17 и Apache 2.2, так как не удалось справиться с завалами модуля PHP

                              Добавлено
                              Удалось нарисовать машинку на карте, но дя этого пришлось в загружаемых файлах с состоянием экипажа и координатами задать время на час больше текущего. Правильно, сервер ведь думает, что сейчас на 1 час больше.

                              Кстати, date('r T') выдает Wed, 28 Mar 2012 17:18:46 +0400 MSD. Судя по часовому поясу, наверно и в этой версии PHP проблема со временем решена. Наверно, дело в винде, которая думает, что у меня GMT + 3. Как это решить?
                                А в винде последние обновления стоят?
                                  Цитата Homez @
                                  Наверно, дело в винде, которая думает, что у меня GMT + 3. Как это решить?
                                  Там наверное списки просто не поправили... у меня тоже написано +3, но я знаю, что живу по +4 и винда мне на это не указчик :lol:
                                  0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                  0 пользователей:


                                  Рейтинг@Mail.ru
                                  [ Script execution time: 0,0327 ]   [ 15 queries used ]   [ Generated: 30.04.24, 10:42 GMT ]