PHP - 从非标准格式转换日期
PHP - convert date from non standard format
我正在解析 returns 格式日期的供稿:
20150129180000
应该是[yyyy][mm][dd][小时][分钟][秒]
我尝试使用 php date() 函数对其进行格式化:
date('Y-m-d H:i:s', $event['start-dt'])
得到这个:
640502-03-05 12:33:20
这显然是不对的。有没有一种流畅的转换方式,还是我只需要手动拼接字符串?
您可以使用preg_replace格式化字符串
$date_str = preg_replace("/^(\d){4}(\d){2}(\d){2}(\d){2}(\d){2}(\d){2}/","-- ::",$event["start-dt"]);
date('Y-m-d H:i:s', strtotime($date_str));
或使用php的DateTime对象
$date = new DateTime($date_str);
或者更好的是,使用 DataTime createFromFormat 方法
$format = "YmdGis";
$dateObj = DateTime::createFromFormat ( $format, $event['start-dt'] );
然后,如果需要,您可以使用 getTimestamp 检索时间戳进行计算。
与 date
相比,格式有些混乱,直到您习惯了它,但这对应于您的日期字符串:
$date = DateTime::createFromFormat('YmdGis', '20150129180000');
echo $date->format('Y-m-d H:i:s');
$date = DateTime::createFromFormat('YmdHis', '20150129180000');
echo $date->format('Y-m-d H:i:s');
我正在解析 returns 格式日期的供稿:
20150129180000
应该是[yyyy][mm][dd][小时][分钟][秒]
我尝试使用 php date() 函数对其进行格式化:
date('Y-m-d H:i:s', $event['start-dt'])
得到这个:
640502-03-05 12:33:20
这显然是不对的。有没有一种流畅的转换方式,还是我只需要手动拼接字符串?
您可以使用preg_replace格式化字符串
$date_str = preg_replace("/^(\d){4}(\d){2}(\d){2}(\d){2}(\d){2}(\d){2}/","-- ::",$event["start-dt"]);
date('Y-m-d H:i:s', strtotime($date_str));
或使用php的DateTime对象
$date = new DateTime($date_str);
或者更好的是,使用 DataTime createFromFormat 方法
$format = "YmdGis";
$dateObj = DateTime::createFromFormat ( $format, $event['start-dt'] );
然后,如果需要,您可以使用 getTimestamp 检索时间戳进行计算。
与 date
相比,格式有些混乱,直到您习惯了它,但这对应于您的日期字符串:
$date = DateTime::createFromFormat('YmdGis', '20150129180000');
echo $date->format('Y-m-d H:i:s');
$date = DateTime::createFromFormat('YmdHis', '20150129180000');
echo $date->format('Y-m-d H:i:s');