Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 从格式创建日期时间_Php_Datetime Format - Fatal编程技术网

Php 从格式创建日期时间

Php 从格式创建日期时间,php,datetime-format,Php,Datetime Format,我想创建具有特定格式的日期,例如03-20-2010的格式为m-d-Y,但日期函数不理解此日期并返回错误的日期 $date = date("Y-m-d", strtotime("03-20-2010")); 上面的代码返回了错误的日期,它背后的原因是什么,如何避免错误的结果?我希望date函数识别的几种格式是“Y/m/d”、“m/d/Y”、“F d,Y”、“m d,Y”。有趣的是,您的问题标题包含了问题的确切解决方案 使用。(注意:要求PHP>=5.3) 它允许您指定预期日期的确切格式,因此不

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

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

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

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

使用。(注意:要求PHP>=5.3)

它允许您指定预期日期的确切格式,因此不存在
strotime()
s歧义/英美偏见

这应该起作用:

$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");

strotime不会识别以“-”分隔的美式排序,但如果使用“/”分隔符,它就可以正常工作

$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]));

原因很简单。strotime()不是一根魔杖。它无法判断某个数字是月还是日。参数中是否有strotime taking格式的自定义实现?此函数适用于大于5.3的php,它为我的版本提供了未定义的函数错误。答案很明显,因为它在文档中,但它不适用于大多数web应用程序目前正在运行。@Ayaz很公平,我忽略了5.3的限制,这使得目前大多数共享主机确实无法使用它。在没有任何评论的情况下否决(技术上仍然有效)答案仍然是不礼貌的,特别是如果你是提问者,谁正在得到帮助。一个问题决不仅仅是你自己的问题,而是为面临同样问题的子孙后代的问题。我不在乎否决票,但我在乎这个姿态。这真的不是一种好的风格。如果你将来想从我这里得到答案,不要再这样做了。