IntlDateFormatter错误地解析我的日期

时间:2017-05-03 11:43:29

标签: php cakephp

尝试让CakePHP 3.4使用locale parser正确解析我的日期。

我按照描述进行了设置,并且一直在错误地解析我的日期。我已将明显的问题部分定位为php-intl扩展程序中的datefmt_create函数。

如果您有兴趣,CakePHP中的相关行是here

$formatter = datefmt_create(
    'en_US',
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    'UTC',
    IntlDateFormatter::GREGORIAN,
    'dd/MM/YYYY HH:mm'
);

$time = $formatter->parse('02/02/2011 12:34');

echo date('r', $time);

为什么上面的代码会返回Sun, 19 Dec 2010 12:34:00 +0000

我希望看到Wed, 02 Feb 2011 12:34:00 +0000

免责声明:我知道日期解析的其他方法,我完全感兴趣的是这个方法的行为不像我期望的那样。

1 个答案:

答案 0 :(得分:0)

首先:由于您使用的是PHP函数datefmt_create,因此这根本不是CakePHP问题。

第二:你混淆了程序风格(datefmt_create)和面向对象的风格($formatter->parse) - 你应该决定你想要走哪条路。

您遇到的问题:
您在datefmt_create函数中使用了错误的语法。检查语法here

此代码将按预期执行:

date_default_timezone_set('UTC');

$formatter = datefmt_create(
    'en_US',
    IntlDateFormatter::NONE,
    IntlDateFormatter::NONE,
    'UTC',
    IntlDateFormatter::GREGORIAN,
    'dd/MM/yyyy HH:mm'
);

// I used `datefmt_parse` instead since it’s also the procedural way to go
$time = datefmt_parse($formatter, '02/02/2011 12:34');

echo date('r', $time);

<强>输出:

Wed, 02 Feb 2011 12:34:00 +0000