使用 DateTimeZone PHP class 的不可预测的效果?
Unpredictable effect of the use of DateTimeZone PHP class?
我正在尝试从数据库中获取 date/timestamp 数据并将它们转换为添加了时区的 JSON/ISO8601 日期时间字符串,这是
的延续
我有以下测试代码:
$t1 = '2019-10-10 00:00:00';
$t2 = '1899-12-30 06:10:38';
$t3 = '2019-12-30 06:10:38';
$t4 = '2019-10-10 00:00:01';
$dt1 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t1, new \DateTimeZone('Europe/Tallinn'));
$dt2 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t2, new \DateTimeZone('Europe/Tallinn'));
$dt3 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t3, new \DateTimeZone('Europe/Tallinn'));
$dt4 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t4, new \DateTimeZone('Europe/Tallinn'));
return $dt1->format('Y-m-d\TH:i:sO')."\r\n".$dt2->format('Y-m-d\TH:i:sO')."\r\n".$dt3->format('Y-m-d\TH:i:sO')."\r\n".$dt4->format('Y-m-d\TH:i:sO');
但结果完全不可预测:
2019-10-10T00:00:00+0300
1899-12-30T06:10:38+0139
2019-12-30T06:10:38+0200
2019-10-10T00:00:01+0300
我为 4 个日期时间字符串中的每一个提供了准确的时区 (Europe/Tallinn),但 DateTime 实例的实际时区不同。我在每种情况下都期望 03 或 02(我不确定使用夏令时效果),但我显然不能期望 0139。这里发生了什么?
PHP 7.x.
这些时区都是正确的,+3适用于夏令时(从3月28日到10月31日),+2是正常时间。关于 1899 时区也是正确的,您可以验证 here
我正在尝试从数据库中获取 date/timestamp 数据并将它们转换为添加了时区的 JSON/ISO8601 日期时间字符串,这是
我有以下测试代码:
$t1 = '2019-10-10 00:00:00';
$t2 = '1899-12-30 06:10:38';
$t3 = '2019-12-30 06:10:38';
$t4 = '2019-10-10 00:00:01';
$dt1 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t1, new \DateTimeZone('Europe/Tallinn'));
$dt2 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t2, new \DateTimeZone('Europe/Tallinn'));
$dt3 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t3, new \DateTimeZone('Europe/Tallinn'));
$dt4 = \DateTime::createFromFormat ('Y-m-d H:i:s', $t4, new \DateTimeZone('Europe/Tallinn'));
return $dt1->format('Y-m-d\TH:i:sO')."\r\n".$dt2->format('Y-m-d\TH:i:sO')."\r\n".$dt3->format('Y-m-d\TH:i:sO')."\r\n".$dt4->format('Y-m-d\TH:i:sO');
但结果完全不可预测:
2019-10-10T00:00:00+0300
1899-12-30T06:10:38+0139
2019-12-30T06:10:38+0200
2019-10-10T00:00:01+0300
我为 4 个日期时间字符串中的每一个提供了准确的时区 (Europe/Tallinn),但 DateTime 实例的实际时区不同。我在每种情况下都期望 03 或 02(我不确定使用夏令时效果),但我显然不能期望 0139。这里发生了什么?
PHP 7.x.
这些时区都是正确的,+3适用于夏令时(从3月28日到10月31日),+2是正常时间。关于 1899 时区也是正确的,您可以验证 here