2013-09-02 3 views
1

Вот скрипт, с выходом каждой строки комментария рядом с каждым утверждением, чтобы продемонстрировать мою проблемуPHP настаивает на неверном часовом поясе

<?php 
    echo date_default_timezone_get(); //Europe/Helsinki 
    date_default_timezone_set('Africa/Cairo'); 
    $script_tz = date_default_timezone_get(); 
    if (strcmp($script_tz, ini_get('date.timezone'))){ 
     echo "\nScript timezone differs from ini-set timezone."; //True, this block is ran 
    } else { 
     echo "\nScript timezone and ini-set timezone match."; 
    } 
    echo "\n".date_default_timezone_get(); //Africa/Cairo 
    echo "\n'".ini_get('date.timezone')."'"; //'' 
    echo "\n".date('Z'); //10800 
    echo "\n".date("m/d/Y h:i:s A T",strtotime("-1 hour")); //I still have to do this to obtain the correct date ! 
?> 

Я нахожусь в Каире, где мы больше не DST около 3 года. Часовой пояс сервера установлен правильно, а опция DST недоступна для включения или отключения DST. Таким образом, он по своей сути отключен. Вот скриншот, чтобы продемонстрировать

enter image description here

В моей php.ini файле

[Date] 
; Defines the default timezone used by the date functions 
;date.timezone = 

Мой PHP версия

PHP 5.2.17 (cli) (built: Jan 6 2011 17:28:41) 
Copyright (c) 1997-2010 The PHP Group 
Zend Engine v2.2.0, Copyright (c) 1998-2010 Zend Technologies 
  • Даже после того, как я установил свой часовой пояс по умолчанию, почему все равно придется манипулировать date() выход (т. уменьшая его на один час), чтобы получить правильное время, соответствующее времени сервера?
  • И почему он настаивает на том, что Europe/Helsinki - это мой часовой пояс?
  • Может ли это иметь какое-либо отношение к Apache?
+0

Почему бы не установить часовой пояс в php.ini? –

+2

Является ли сервером тот же компьютер Windows, с которого вы показываете скриншоты? – Jon

+0

@ Джон, да. Я даже использую Win7, и внешний вид отличается от других, поэтому я не перепутал –

ответ

2

Информация DST хранится в timezonedb, базу данных, которая поставляется с каждой установки PHP по умолчанию. Поскольку ваша версия PHP является положительно древней, и вы говорите, что настройки DST для вашей страны недавно изменились, timezonedb просто устарел. Его необходимо обновлять либо путем обновления самого PHP, либо путем обновления базы данных через PECL.

См. http://php.net/manual/en/datetime.installation.php, http://pecl.php.net/package/timezonedb, How to install PECL extensions.

+0

Можете ли вы подтвердить, что дальнейшие обновления PHP «полностью» обратно совместимы? –

+0

Между PHP 5.2 и текущим 5.5 могут быть или не быть некоторые нарушения. Я не могу сказать вам, что ваши скрипты будут работать так, как есть, вам нужно проверить это самостоятельно. Вы должны сделать это в любом случае и подготовиться к переходу, так как 5.2 больше не поддерживается. – deceze

+0

Я продолжу это. Большое спасибо за вашу помощь. –

0

Вы можете использовать 'e' для своей даты.

Timezone идентификатор --- --- е Timezone (добавлено в PHP 5.1.0) Примеры: UTC, GMT, Atlantic/Азорские

Или вы можете использовать 'я' для летнего времени

Источник; http://php.net/manual/en/function.date.php

Надежда это решить вашу проблему :)

Смежные вопросы