我注意到,与DateTime()
函数的相同类型输出相比,IntlDateFormatter()
函数返回错误的时间戳。
- PHP代码:**
$formatter = new IntlDateFormatter(
'en_GB',
IntlDateFormatter::SHORT,
IntlDateFormatter::SHORT,
'Europe/London',
IntlDateFormatter::GREGORIAN,
'dd MMMM YYYY, HH:mm'
);
$now = new DateTime('01-03-2023 17:00');
echo '<b>DateTime() String:</b> ' . $now->format('d F Y, H:i') . '<br/>';
echo '<b>IntlDateFormatter() String:</b> ' . $formatter->format( $now ) . '<br/><br/>';
echo '<b>DateTime() Timestamp:</b> ' . $now->getTimestamp() . '<br/>';
echo '<b>IntlDateFormatter() Timestamp:</b> ' . $formatter->parse( $formatter->format( $now ) );
- 输出:**
- 日期时间()字符串:**2023年3月1日17:00
- IntlDateFormatter()**字符串:2023年3月1日17:00
- 日期时间()时间戳:**1677690000
- Intl日期格式设置程序()时间戳:**1672074000
如上所示,IntlDateFormatter()
返回了正确的字符串,但是从同一个源返回了错误的时间戳值。为什么会发生这种情况?
1条答案
按热度按时间wlp8pajw1#
当调用
$formatter->parse($formatter->format($now))
时,parse方法将week year值解释为year值,导致时间戳值与DateTime对象的时间戳不同。要获得一致的输出,可以在
IntlDateFormatter
中使用小写yyyy
而不是大写YYYY
。