我想创建具有特定格式的日期,例如 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”。
我想创建具有特定格式的日期,例如 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”。
有趣的是,您的问题标题包含问题的确切解决方案!
使用DateTime::createFromFormat
. (注:需要 PHP >= 5.3)
它允许您指定预期日期的确切格式,因此没有strtotime()
歧义/英美偏见。
这应该有效:
$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
strtotime 无法识别以“-”分隔的美式排序,但如果您使用“/”分隔符,它将正常工作。
$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));
正如 Pekka 所指出的,如果您的代码明确声明您正在使用的格式,那就更好了。
您可以使用 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]));