我试图将日期“31/01/2015 11:33:22 AM”更改为PHP中的“2015-01-31 11:33:22”
我试过了
echo strtotime('31/01/2015 11:33:22 AM');
但它的抛出错误..任何想法。请分享
错误消息
警告:strtotime()[function.strtotime]:依赖系统的时区设置是不安全的。您必需使用date.timezone设置或date_default_timezone_set()函数。如果您使用了这些方法中的任何一种并且仍然收到此警告,则很可能拼错了时区标识符。我们选择'America / New_York'作为'EST / -5.0 / no DST'而不是第2行
答案 0 :(得分:2)
首先,您应该设置您的时区,就像已经告诉您的警告:
date_default_timezone_set('America/Los_Angeles');
然后,您应该查看Localized Notations
下的the manual,您将看到,php将31/01/2015
解析为American month, day and year
(格式为m/d/Y
},而不是d/m/Y
正如你所假设的那样)。请参阅demo。
您的日期格式是自定义的,您应该将其视为一个。将格式转换为/
到.
,因此输出日期为31.01.2015
,php将理解为d.m.Y
格式。请参阅demo。
恕我直言,打赌案例将是使用DateTime::createFromFormat()
,告诉方法你期望什么作为输入,如下:
$date = DateTime::createFromFormat('d/m/Y g:i:s A', $input);
echo $date->format('Y-m-d H:i:s');
的 demo 强>
答案 1 :(得分:0)
在你的strtotime功能之前加上它:
date_default_timezone_set('America/New_York')
以下是来自PHP.net的示例:
<?php
date_default_timezone_set('America/Los_Angeles');
$script_tz = date_default_timezone_get();
if (strcmp($script_tz, ini_get('date.timezone'))){
echo 'Script timezone differs from ini-set timezone.';
} else {
echo 'Script timezone and ini-set timezone match.';
}
?>
答案 2 :(得分:0)
试试这个
$dt = "02/09/2015 11:33:22 AM";
$expDate = explode('/',$dt);
$newdate = $expDate[1]."/".$expDate[0]."/".$expDate[2];
$test = new DateTime($newdate);
echo date_format($test, 'Y-m-d H:i:s');