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


当前回答

既然没人提到这一点,这里有另一种方法:

$date = date_create_from_format("m-d-Y", "10-16-2003")->format("Y-m-d");

其他回答

您需要小心使用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');

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

第一次约会

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

新日期

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

如果你的格式是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

如果您的日期格式为“07/May/2018”,并需要将其改为“2018-05-07”,以便与MySQL兼容,您可以使用:

if (!empty($date)) {
  $timestamp = strtotime($date);
  if ($timestamp === FALSE) {
    $timestamp = strtotime(str_replace('/', '-', $date));
  }
  $date = date('Y-m-d', $timestamp);
}

对我来说,这样做很有效:

$stringDate = "2022-02-24T17:15:00"; (如果你只发送日期“2022-02-24”,它会将时间填充为00:00:00)。

$dateFormat = 新的日期时间($miStringDate);