strtotime英国日期怪异

时间:2012-11-08 11:12:21

标签: php

也许我需要更多的睡眠,但我对strtotime有些奇怪,我无法解释。

英国本地化的日期标记为d/m/Y,这是我从外部来源插入到MySQL中的CSV格式(格式:Y-m-d)。

我看到的直接问题当然是PHP(使用strtotime时)转换了这些错误。以下是var_dump字段值的示例,其中包含strtotime var_dump之后的帖子:

string(10) "13/07/1992" string(19) "1969-12-31 16:00:00" // This one is odd
string(10) "07/09/1992" string(19) "1992-07-09 00:00:00"
string(10) "09/11/1992" string(19) "1992-09-11 00:00:00"

最初我认为这是因为PHP不支持英国符号(http://www.php.net/manual/en/datetime.formats.date.php)并且认为它是美国日期但是这并不能解释为什么我改变我的函数以用{替换/ {1}}:

-

相同的日期确实有效:

date('Y-m-d H:i:s', strtotime(str_replace('/', '-', $string_time)))

我实际上有一个200个日期的测试集,所有日期都以string(10) "13/07/1992" string(19) "1992-07-13 00:00:00" string(10) "07/09/1992" string(19) "1992-09-07 00:00:00" string(10) "09/11/1992" string(19) "1992-11-09 00:00:00" 表示法工作。

根据文件,这里的规则是否应该适用?

1 个答案:

答案 0 :(得分:0)

美国格式使用斜杠,因为这是那里的惯例。通常,不使用破折号。 strototime()的行为非常简单:

  • 两位数,斜线,两位数,斜线,四位数?美国格式(月,日)。
  • 两位数字,短划线,两位数字,短划线,四位数字?国际格式(日,月)。

可以找到更加技术性的格式列表(以及strototime()如何解释它们)here

您可能也对DateTime::createFromFormat感兴趣。