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


当前回答

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

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

其他回答

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

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

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

如果您的日期格式为“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);
}

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

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

要解析日期,你应该使用: DateTime: createFromFormat ();

Ex:

$dateDE = "16/10/2013";
$dateUS = \DateTime::createFromFormat("d.m.Y", $dateDE)->format("m/d/Y");

但是,要小心,因为这会崩溃:

PHP Fatal error: Call to a member function format() on a non-object 

你实际上需要检查格式是否正常,首先:

$dateDE = "16/10/2013";
$dateObj = \DateTime::createFromFormat("d.m.Y", $dateDE);
if (!$dateObj)
{
    throw new \UnexpectedValueException("Could not parse the date: $date");
}
$dateUS = $dateObj->format("m/d/Y");

现在你将得到一个异常,而不是崩溃,你可以捕获,传播,等等。

$dateDE格式错误,应该是“16.10.2013”;

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

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