2013-10-12 40 views
1

我有日期和时间,如:PHP先进的strtotime转换

12-Oct-13 09:15 PM AEST 
10-Oct-13 07:05 PM AEST 

我用的strtotime()PHP函数像这样将它转换为datetime对象如下:

echo $datetime=strtotime('12-Oct-13 09:15 PM AEST'); 

但得到空的结果。我的想法是上述日期时间转换为其他格式,如:

12-10-2013 09:15 PM 
10-10-2013 07:05 PM 

谁能帮我,为了正确地转换为datetime对象。然后我在我的代码中使用它。

+0

问题在于“AEST”部分,当你从日期中删除它,strtotime()就像你期望的那样工作。 –

+2

你有没有考虑过使用datetime格式创建? http://www.php.net/manual/en/datetime.createfromformat.php –

+0

DateTime是要走的路。 –

回答

5

PHP不支持AEST时区,这就是为什么strtotime()返回false。见list of supported TZ's

您可以将输入仍要转换为所需要的输出:

$input = '12-Oct-13 09:15 PM AEST'; 
$dt = DateTime::createFromFormat('d-M-y H:i A *', $input); 
echo $dt->format('d-m-Y h:i A'); # 12-10-2013 09:15 PM 

,或者因为AEST时区从UTC偏移+10:00,只是字符串替换:

$input = '12-Oct-13 09:15 PM AEST'; 
$input = str_replace(' AEST', ' +1000', $input); 
$dt = new DateTime($input); 
print_r($dt); 
/* 
DateTime Object 
(
    [date] => 2013-10-12 21:15:00 
    [timezone_type] => 1 
    [timezone] => +10:00 
) 
*/ 

,或者切断时区部分来自字符串:

$input = '12-Oct-13 09:15 PM AEST'; 
$input = substr($input, 0, strrpos($input, ' ')); 

echo date_create($input)->format('d-m-Y h:i A'); # 12-10-2013 09:15 PM 
# or 
echo date('d-m-Y h:i A', strtotime($input)); # 12-10-2013 09:15 PM 
+0

巧妙使用'*'。 +1 –

+1

@AmalMurali:tnx固定错别字;) –

+0

谢谢我使用strtotime(str_replace('AEST','',$ date))这将返回我想要的东西 –