【发布时间】:2010-11-12 10:23:13
【问题描述】:
在 PHP 中很简单,我的日期是 2011 年 1 月 8 日,格式为 08-01-11 - 当我将它运行到 strtotime 并将其转换回不同的日期格式时,它会恢复到 2011 年 8 月 1 日 - 不是理想!
有什么简单的方法可以解决这个问题,而不必将所有内容放入不同的数组/变量中然后再放回去?
谢谢!
【问题讨论】:
在 PHP 中很简单,我的日期是 2011 年 1 月 8 日,格式为 08-01-11 - 当我将它运行到 strtotime 并将其转换回不同的日期格式时,它会恢复到 2011 年 8 月 1 日 - 不是理想!
有什么简单的方法可以解决这个问题,而不必将所有内容放入不同的数组/变量中然后再放回去?
谢谢!
【问题讨论】:
完美的解决方案是让美国首先使用正确的日期格式... ;0)
我这样做是为了解决它:
$date = "31/12/2012";
$bits = explode('/',$date);
$date = $bits[1].'/'.$bits[0].'/'.$bits[2];
$date 现在是strtotimeable
【讨论】:
来自 PHP 手册:
“m/d/y 或 d-m-y 格式的日期通过查看各个组件之间的分隔符来消除歧义:如果分隔符是斜线 (/),则假定为美式 m/d/y;而如果分隔符为破折号 (-) 或点 (.),则假定为欧洲 d-m-y 格式。
为避免潜在的歧义,最好尽可能使用 ISO 8601 (YYYY-MM-DD) 日期或 DateTime::createFromFormat()。”
我用破折号替换了斜杠,然后 strtotime 在英国日期按预期工作。
【讨论】:
strtotime()works with US dates only:
该函数期望得到一个包含美国英语日期格式的字符串,并将尝试将该格式解析为 Unix 时间戳。
您必须重新排列日期格式或使用 date_parse_from_format() (PHP 5.3+) 来解析英国风格的字符串。
【讨论】:
explode("-", $date); 并重新排列数组可能是最好的解决方案。