13

很简单,在 PHP 中我的日期是 2011 年 1 月 8 日,格式为 08-01-11 - 当我将它运行到 strtotime 并将其转换回不同的日期格式时,它会恢复到 2011 年 8 月 1 日 - 不理想!

有什么简单的方法可以解决这个问题,而不必将所有内容放入不同的数组/变量中并再次返回?

谢谢!

4

3 回答 3

28

完美的解决方案是让美国首先使用正确的日期格式... ;0)

我这样做是为了解决它:

$date = "31/12/2012";
$bits = explode('/',$date);
$date = $bits[1].'/'.$bits[0].'/'.$bits[2];

$date现在strtotime能够

于 2013-01-14T22:48:26.557 回答
14

来自 PHP 手册:

“m/d/y 或 dmy 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜杠 (/),则假定为美式 m/d/y;而如果分隔符是破折号 (-) 或圆点 (.),则假定为欧洲 dmy 格式。

为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。”

我用破折号替换了斜线,然后 strtotime 按英国日期的预期工作。

于 2012-09-26T11:51:14.683 回答
11

strtotime() 仅适用于美国日期

该函数期望得到一个包含美国英语日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳。

您必须重新排列日期格式或使用date_parse_from_format()(PHP 5.3+) 来解析英国风格的字符串。

于 2010-11-12T10:29:56.730 回答