如果我有一个格式为mm-dd-YYYY的PHP字符串(例如,10-16-2003),我如何正确地将其转换为日期,然后是YYYY-mm-dd格式的日期时间?我同时要求Date和DateTime的唯一原因是,我需要一个在一个地方,另一个在不同的地方。


当前回答

在第一次约会时使用strtotime(),然后date('Y-m-d')将其转换回来:

$time = strtotime('10/16/2003');

$newformat = date('Y-m-d',$time);

echo $newformat;
// 2003-10-16

请注意,在strtotime()函数中使用正斜杠/和连字符-是有区别的。引用自php.net:

m/d/y或d-m-y格式的日期 可以通过查看 在不同的 组件:如果分隔符为a /,则美式的m/d/y为 假设;而如果分隔符是a 破折号(-)或点(.),然后是 采用欧洲d-m-y格式。 为了避免潜在的歧义,最好尽可能使用ISO 8601 (YYYY-MM-DD)日期或DateTime::createFromFormat()。

其他回答

我尝试了上面所有的答案,但失败了,在我的情况下,我构建了一个函数,获得以下格式“YYYY/mm/dd”的日期字符串。所以我认为像这样爆炸弦会更好:

$old_date = explode('/', $coming_date_str);

new_data =美元old_date old_date美元[0]。”——“。[1],”——“。美元old_date [2];//将字符串转换为上述所有帖子并完成

$new_date = date('Y-m-d', strtotime($new_data));
$new_date = DateTime::createFromFormat("Y-m-d", new_date);

在第一次约会时使用strtotime(),然后date('Y-m-d')将其转换回来:

$time = strtotime('10/16/2003');

$newformat = date('Y-m-d',$time);

echo $newformat;
// 2003-10-16

请注意,在strtotime()函数中使用正斜杠/和连字符-是有区别的。引用自php.net:

m/d/y或d-m-y格式的日期 可以通过查看 在不同的 组件:如果分隔符为a /,则美式的m/d/y为 假设;而如果分隔符是a 破折号(-)或点(.),然后是 采用欧洲d-m-y格式。 为了避免潜在的歧义,最好尽可能使用ISO 8601 (YYYY-MM-DD)日期或DateTime::createFromFormat()。

您需要小心使用m/d/Y和m-d-Y格式。PHP认为/表示m/d/Y, -表示d-m-Y。在这种情况下,我将显式地描述输入格式:

$ymd = DateTime::createFromFormat('m-d-Y', '10-16-2003')->format('Y-m-d');

这样你就不会因为某个解释而心血来潮。

如果你的格式是dd-mm-yyyy,那么在PHP中它将不能正常工作。在PHP文档中,他们有以下指导方针。

m/d/y或d-m-y格式的日期可以通过查看消除歧义 各部件之间的分离器:如果分离器是一个 /,则假定美式的m/d/y;然而如果 分隔符是一个破折号(-)或一个点(.),然后是欧洲d-m-y格式 假定。

所以,你不能随心所欲地使用。当你尝试使用dd/mm/yyyy格式时,它将删除FALSE。你可以用下面的方法进行调整。

$date = "23/02/2013";
$timestamp = strtotime($date);
if ($timestamp === FALSE) {
  $timestamp = strtotime(str_replace('/', '-', $date));
}
echo $timestamp; // prints 1361577600

第一次约会

$_firstDate = date("m-d-Y", strtotime($_yourDateString));

新日期

$_newDate = date("Y-m-d",strtotime($_yourDateString));