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


当前回答

第一次约会

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

新日期

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

其他回答

在第一次约会时使用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()。

第一次约会

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

新日期

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

如果您的日期格式为“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);
}
$d = new DateTime('10-16-2003');

$timestamp = $d->getTimestamp(); // Unix timestamp
$formatted_date = $d->format('Y-m-d'); // 2003-10-16

编辑:您还可以将DateTimeZone传递给DateTime()构造函数,以确保创建所需时区的日期,而不是服务器默认的日期。

如果您想获取当月的最后一天,可以使用以下代码。

$last_day_this_month  = date('F jS Y', strtotime(date('F t Y')));