日期时间从格式创建

Aya*_*avi 2 php datetime-format

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

$date = date("Y-m-d", strtotime("03-20-2010"));
Run Code Online (Sandbox Code Playgroud)

上面的代码返回错误的日期,它背后的原因是什么以及如何避免错误的结果?我想要日期功能识别的格式很少是"Y/m/d","m/d/Y","F d,Y","M d,Y".

Pek*_*ica 23

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

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

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

这应该工作:

$date = DateTime::createFromFormat("Y-m-d", "2010-03-20");
Run Code Online (Sandbox Code Playgroud)

  • 公平地说@Ayaz,我忽略了5.3限制,并且目前在大多数共享的托管服务商上确实无法使用它.在没有任何评论的情况下对一个(技术上仍然有效)的答案进行投票仍然是无礼的,特别是如果你是问题提供者正在得到帮助.一个问题不仅仅是针对自己,而是面向同一问题的后代.我不关心downvote,但我确实关心这个姿势.这真的不是好风格.如果您希望将来得到我的答案,请不要再这样做了. (8认同)

Pau*_*xon 5

strtotime不会识别由' - '分隔的美式样式,但如果使用'/'分隔符,它将正常工作.

$date = date("Y-m-d", strtotime(str_replace('-', '/', "03-20-2010")));
Run Code Online (Sandbox Code Playgroud)

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