PHP не поддерживает BST. Его нет в списке поддерживаемых часовых поясов Европа или других часовых поясов . Я не уверен, почему он не выдает исключение при использовании BST
, но документы говорят здесь, что:
Поведение часовых поясов, не перечисленных здесь, undefined.
Также очевидно, что "BST" не работает правильно, потому что, когда вы создаете время с часовым поясом BST
, вывод всегда говорит +00:00
, даже в летние месяцы:
>>> $date = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-01-30 16:34:00', 'BST');
=> Carbon\Carbon @1580402040 {#3261
date: 2020-01-30 16:34:00.0 +00:00,
}
>>> $date = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-05-30 16:34:00', 'BST');
=> Carbon\Carbon @1590856440 {#3258
date: 2020-05-30 16:34:00.0 +00:00,
}
Однако, когда вы используете часовой пояс Europe/London
, на выходе будет сказано +00:00
(по сути, «UT C») в зимние месяцы и +01:00
(по сути, «BST») в летние месяцы:
>>> $date = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-01-30 16:34:00', 'Europe/London');
=> Carbon\Carbon @1580402040 {#3256
date: 2020-01-30 16:34:00.0 Europe/London (+00:00),
}
>>> $date = \Carbon\Carbon::createFromFormat('Y-m-d H:i:s', '2020-05-30 16:34:00', 'Europe/London');
=> Carbon\Carbon @1590852840 {#3251
date: 2020-05-30 16:34:00.0 Europe/London (+01:00),
}
Таким образом, часовые пояса, основанные на местоположении, уже учитывают переход на летнее время.