使用以下代码尝试获取"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)
. 使用适当的时间函数可以做到这一点吗?
是的,为此使用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
注意:请注意 m/d/y 或 d-m-y 格式的日期;如果分隔符是斜杠 (/),则假定为美式 m/d/y。如果分隔符是短划线 (-) 或点 (.),则假定采用欧洲 d-m-y 格式。为避免潜在错误,应尽可能使用 YYYY-MM-DD 日期或 date_create_from_format()。
来源:w3schools
您必须将"-"转换为"/"。
<?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
>如果日期由-
分隔,则strtotime
采用欧洲格式的日期,如果按/
分隔,则采用美国日期格式
注意:来自手册 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 对象