2015-05-27 2 views
1

Я разработал часть приложения, которая записывает, когда определенные записи, где были изменены и созданы, поэтому в основном мы используем функцию time() для записи при сохранении изменений.Проблема с часовым поясом PHP | BST и GMT

Я нахожусь в Великобритании, поэтому мой часовой пояс должен быть GMT. Однако в Великобритании мы используем DST, поэтому летом мы больше не в GMT, а в BST.

Как изменить часовой пояс, чтобы использовать BST (GMT GMT). Я хотел бы объявить его в своем php-файле, чтобы его легко изменить. Вот что у меня есть на данный момент:

date_default_timezone_set("UTC"); 

Когда я изменить его на:

date_default_timezone_set("BST"); 

Я получаю ошибку PHP Timezone ID 'BST' is invalid, и когда я могу изменить его в Европу/Лондон, он по-прежнему остается как GMT, а не BST

+0

Что относительно date_default_timezone_set ('Etc/GMT-1'); – Omar

ответ

2

Вы установили часовой пояс на Europe/London, который автоматически перейдет между GMT и BST в соответствующие даты. Часовой пояс включает эту информацию, это в основном точка времени (в смысле PHP).

РНР руководство сподручно включает в себя точно this as a sample:

$timezone = new DateTimeZone("Europe/London"); 
$transitions = $timezone->getTransitions(); 
print_r(array_slice($transitions, 0, 3)); 

Array 
(
    [0] => Array 
     (
      [ts] => -9223372036854775808 
      [time] => -292277022657-01-27T08:29:52+0000 
      [offset] => 3600 
      [isdst] => 1 
      [abbr] => BST 
     ) 

    [1] => Array 
     (
      [ts] => -1691964000 
      [time] => 1916-05-21T02:00:00+0000 
      [offset] => 3600 
      [isdst] => 1 
      [abbr] => BST 
     ) 

    [2] => Array 
     (
      [ts] => -1680472800 
      [time] => 1916-10-01T02:00:00+0000 
      [offset] => 0 
      [isdst] => 
      [abbr] => GMT 
     ) 

) 
+0

Как я уже сказал, я изменил его на europe/london, но он по-прежнему использует GMT, а не BST (его один час позади) – Eclipse

+0

Тогда вам, вероятно, нужно [обновить свой часовой пояс db] (http://php.net/manual/ ен/datetime.installation.php). Если он устарел и произошли изменения в определениях часовых поясов в реальном мире, ваш PHP не будет иметь эту информацию. – deceze

+0

Не могли бы вы пролить некоторое представление о том, где я должен вставлять эти файлы во временную зону db? спасибо – Eclipse

1

time() Функция возвращает метку времени Unix, который всегда будет основано на UTC (который так же, как по Гринвичу). Было бы неверно, если бы он был скорректирован для BST или для любого другого часового пояса.

Существуют другие функции для работы с местным временем и для преобразования временной метки unix в строку для отображения. Именно здесь вы используете часовой пояс Europe/London.

BST недействителен, так как это может означать «Бангладешское стандартное время» или несколько других часовых поясов. В общем, не полагайтесь на сокращения в часовом поясе.

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