使用strtotime转换时的php日期问题,但如何正确地执行此操作?

时间:2016-06-03 15:05:42

标签: php date strtotime

使用以下代码尝试获取'Y-m-d',并应返回2016-05-10,但它将返回2016-10-05。

// m-d-Y (Month-Day-Year)
$test_date = '05-10-2016';

// Convert to Y-m-d
$convert_date = date('Y-m-d', strtotime($test_date));


echo $convert_date;

如何让“Y-m-d”返回?不试图使用explode('-', $test_date)。这可以使用适当的时间函数吗?

3 个答案:

答案 0 :(得分:3)

是的,请使用DateTime对象:

$test_date = '05-10-2016';
$DateTime = DateTime::createFromFormat('m-d-Y', $test_date, new DateTimeZone('utc'));
var_dump($DateTime);

<强>输出

object(DateTime)[8]
  public 'date' => string '2016-05-10 15:08:53.000000' (length=26)
  public 'timezone_type' => int 2
  public 'timezone' => string 'UTC' (length=3)

所以

echo $DateTime->format('Y-m-d'); //2016-05-10 

答案 1 :(得分:1)

strtotime假设欧洲格式化日期,如果它们由-和美国日期格式分隔,如果它们由/分隔

  

注意:from the manual strtotime()

     

通过查看各个组件之间的分隔符来消除m / d / y或d-m-y格式的日期:如果分隔符是斜杠(/),则假设为美国m / d / y;而如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。但是,如果年份以两位数格式给出,而分隔符是破折号( - ,日期字符串被解析为y-m-d。

     

为避免潜在的歧义,最好尽可能使用ISO 8601(YYYY-MM-DD)日期或DateTime :: createFromFormat()。

因此str_replace

只能- /
// m-d-Y (Month-Day-Year)
$test_date = '05-10-2016';
$test_date = str_replace('-', '/', $test_date);

// Convert to Y-m-d
$convert_date = date('Y-m-d', strtotime($test_date));

echo $convert_date;

或者更好地使用DateTime object

答案 2 :(得分:1)

  

注意:请注意m / d / y或d-m-y格式的日期;如果分隔符是斜杠(/),则假定为美国m / d / y。如果分隔符是破折号( - )或点(。),则假定为欧洲d-m-y格式。为避免潜在的错误,您应该尽可能使用YYYY-MM-DD日期或date_create_from_format()。

来源: w3schools

您必须转换&#39; - &#39;通过&#39; / &#39;。

<?php// m-d-Y (Month-Day-Year)
$test_date = str_replace('-', '/', '05-10-2016');

// Convert to Y-m-d
$convert_date = date('Y-m-d', strtotime($test_date));

echo $convert_date; // 2016-05-10