2

我想创建具有特定格式的日期,例如 03-20-2010 的格式为 mdY 但日期函数不理解该日期并返回错误的日期

$date = date("Y-m-d", strtotime("03-20-2010"));

上面的代码返回错误的日期,它背后的原因是什么以及如何避免错误的结果?我希望日期函数识别的几种格式是“Y/m/d”、“m/d/Y”、“F d, Y”、“M d, Y”。

4

3 回答 3

23

有趣的是,您的问题标题包含问题的确切解决方案!

使用DateTime::createFromFormat. (注:需要 PHP >= 5.3)

它允许您指定预期日期的确切格式,因此没有strtotime()歧义/英美偏见。

这应该有效:

$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
于 2010-08-22T16:04:32.087 回答
5

strtotime 无法识别以“-”分隔的美式排序,但如果您使用“/”分隔符,它将正常工作。

$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));

正如 Pekka 所指出的,如果您的代码明确声明您正在使用的格式,那就更好了。

于 2010-08-22T16:06:26.873 回答
1

您可以使用 mktime 获取时间戳并使用该时间戳

$exact_time = "03-20-2010";
$exploded_et = explode("-",$exact_time);
$date = date("Y-m-d",mktime(0,0,0,$exploded_et[0],$exploded_et[1],$exploded_et[2]));
于 2010-08-22T16:10:21.367 回答