使用以下代码尝试获取'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)
。这可以使用适当的时间函数吗?
答案 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