1

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

日期的英国本地化表示法d/m/Y是我在 CSV 中从外部来源获得的要插入 MySQL 的内容(格式:)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)并且认为这是美国日期但是这并不能解释为什么如果我将我的功能更改/-

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

相同的日期确实有效:

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"

事实上,我有一个包含 200 个日期的测试集,它们都在这个-符号下工作。

根据文档,这里不应该应用相同的规则吗?

4

1 回答 1

0

美国格式使用斜线,因为那是那里的约定。通常,不使用破折号。strototime()的行为很简单:

  • 两位数,斜线,两位数,斜线,四位数?美国格式(月,然后日)。
  • 两位数,破折号,两位数,破折号,四位数字?国际格式(日,然后月)。

strototime()可以在此处找到更技术性的格式列表(以及如何解释它们) 。

您可能还对DateTime::createFromFormat 感兴趣

于 2012-11-08T11:16:37.187 回答