这实际上是this question的后续问题,但它提出了一个完全不同的问题。我也知道这很令人困惑,所以请多多包涵。
我有一个日期,如下所示1/04/2013
:Jan 04 2013
在前面提到的问题中,我不得不将小时和分钟随机添加到时间格式中,它适用于它应该做的事情:
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
这产生了类似的东西: 2013-05-01 08:57:00
问题是,现在系统将该日期视为MAY 1st
而不是JAN 05
..
当我自动插入这些帖子(wp)时 - 所有具有类似日期的帖子都2012-05-28
将被插入到数据库中1970-01-01
(我认为这是 php 的默认“错误日期”格式 .. 第 28 个月当然是一个错误。 . )
我试图从
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
到
$clr_datenew = date('Y-d-m ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime($date));
但是使用不同的日期组合会产生相同的错误。
在一位同事给了我一个提示之后:
strtotime 将 x/y/z 解释为 mm/dd/yy[yy],并将 xyz 解释为 dd-mm-yyyy 或 yy-mm-dd,具体取决于 z 是 4 位还是 2。
我也试过:
date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));
我真的在这里失去理智:-)
我认为这是因为我使用 strtotime() 函数实际上“猜测”如何根据松散的“人类”格式来格式化我的时间。
是否有将日期从一个日期转换为另一个日期的功能,同时指定原始日期格式和所需的转换格式?
像dummy_function($origformat,$wantedformat)
我可以指定的地方dummy_function('Y-d-m','Y-m-d')
编辑我 在阅读了@harke 的评论后,我触发了一些东西并将其与@Maks3w 的答案结合起来,看来适合我的格式是:
$clr_datenew = date('Y-m-d ' . sprintf('%02d:%02d:00', mt_rand(0, 23), mt_rand(0, 59)), strtotime(str_replace('/','-',$clr_date)));
我无法验证 Php 5.3+ 方法,因为它们与我不那么相关,因为该特定公司的(内部)服务器正在运行较低版本..
应该在 DB 设计师/程序员的每个广告牌上张贴一些额外的东西:http: //xkcd.com/1179/
那是 - 直到另行通知:-)