IntlDateFormatter::localtime() unexpectedly causes time zone to be changed if specified
@devnexen đang làm issue này rồi.
Từ ngày 20/3/2024.
- Ngôn ngữ chính
- C
- Star
- 40.4k
- Fork
- 8.2k
- Merge trung bình
- 2 ngày 15 giờ
- Pull request đã merge (30 ngày)
- 103
Mô tả
Description
The following code:
<?php
$oIntlDateFormatter = new IntlDateFormatter("en_GB");
$oIntlDateFormatter->setTimeZone('Europe/Berlin');
$oIntlDateFormatter->setPattern('VV');
$oIntlDateFormatter->parse('America/Los_Angeles', $offsetResult);
var_dump($oIntlDateFormatter->getTimeZone()->getID());
$oIntlDateFormatter->localtime('America/Los_Angeles');
var_dump($oIntlDateFormatter->getTimeZone()->getID());
Resulted in this output:
string(13) "Europe/Berlin"
string(19) "America/Los_Angeles"
But I expected this output instead:
Either:
string(13) "Europe/Berlin"
string(13) "Europe/Berlin"
Or
string(19) "America/Los_Angeles"
string(19) "America/Los_Angeles"
IntlDateFormatter should either consistently keep the originally set time zone or consistently overwrite the time zone whenever different time zone data is supplied.
IntlDateFormatter::localtime() causes the time zone within an IntlDateFormatter object to be changed, if a time zone was provided in the used date/time pattern. This is nowhere mentioned in the documentation of IntlDateFormatter::localtime() and in contrast IntlDateFormatter::parse() does not behave this way. This is why I think the behaviour of IntlDateFormatter::localtime() is not intentional.
In contrast when I look at DateTime::createFromFormat(), a time zone supplied in the $datetime parameter consistently overrides a supplied $timezone parameter.
Having looked a bit into PHPs code, It seems like DateTime::createFromFormat() and internally always generates a field-based time value and generates a date/time representation from that, just like IntlDateFormatter::localtime(). So this may be also triggering the change of the time zone.
IntlDateFormatter::parse() on the other hand appears to to only call into the ICU library to get a parse the supplied date/time string.
PHP Version
PHP 8.3.4
Operating System
Ubuntu 22.04.1
Hướng dẫn đóng góp
Bắt đầu từ đâu
- Đọc hết issue, rồi đọc hướng dẫn đóng góp của dự án.
- Bình luận trên issue rằng bạn sẽ nhận — tránh hai người làm cùng một việc.
- Fork repository và làm thay đổi trên một nhánh.
- Mở pull request có tham chiếu số hiệu của issue.
Đánh giá
Issue này chưa được đánh giá.