【问题标题】:PHP IntlDateFormatter format returns wrong datePHP IntlDateFormatter 格式返回错误的日期
【发布时间】:2012-03-18 23:32:21
【问题描述】:

我使用 IntlDateFormatter 得到的结果不正确:

$dateFormater = \IntlDateFormatter::create(
'en_EN',
\IntlDateFormatter::LONG,
\IntlDateFormatter::NONE
);

$a = date('Y/m/d H:i:s',1332712800); //2012/03/26 00:00:00
$b = $dateFormater->format(1332712800); //March 25, 2012

但这仅发生在 2012/03/26 和 2012/10/28 之间且没有小时 (00:00:00) 的日期。

我找不到问题所在。

感谢您的帮助。

【问题讨论】:

  • 为我工作。无法重现。可能是时区问题。
  • 我发现问题:需要指明时区,似乎IntlDateFormatter没有从php.ini中取时区,(如php日期函数)。
  • 手册说“时区ID,默认为系统默认值。”虽然

标签: php date format intl


【解决方案1】:

http://userguide.icu-project.org/datetime/timezone#TOC-Factory-Methods-and-the-Default-Tim

TimeZone 维护一个静态时区对象,称为默认时区。这是当用户未指定时隐式使用的时区。 ICU 尝试将其与主机操作系统时区匹配。

简而言之,如果您想将 默认时区 从 intl 更改为匹配 date() 所说的内容,则必须更改操作系统上的时区。但是不要那样做

最好在调用IntlDateFormatter::create() 时指定时区。如果您希望使用 PHP 在其他地方使用的默认时区,可以使用 date_default_timezone_get() 检索。

$dateFormater = \IntlDateFormatter::create(
    'en_EN',
    \IntlDateFormatter::LONG,
    \IntlDateFormatter::NONE,
    date_default_timezone_get()
);

【讨论】:

    猜你喜欢
    • 2019-08-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-09-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多