Проблема с часовым поясом в PHP | BST и GMT

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

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

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

date_default_timezone_set("UTC");

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

date_default_timezone_set("BST");

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

4

Решение

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

Руководство PHP удобно включает в себя именно это как образец:

$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
)

)
6

Другие решения

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

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

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

1

По вопросам рекламы [email protected]