2014-01-21 172 views
1

IM傳遞的startDate結束的結束日期作爲GET請求參數的方法, 這裏他們得到解析,如:PHP日期時間,解析字符串日期失敗

$startDate=$request->query->get('start'); 
$endDate=$request->query->get('end'); 
$logger->info('startdate is :'.$startDate.', endDate is : '.$endDate.''); 

$start=new \DateTime($startDate); 
$end=new \DateTime($endDate); 

當我登錄這兩個參數,它們可能是

startdate is: Wed Jan 12 2011 00:00:00 GMT 0100 (CET) 

startDate is: Sat Jan 12 2013 00:00:00 GMT 0100 (CET) 

到目前爲止好,但如果我登錄從字符串實例化的DateTime's上述返回

DateTime Object ([date] => 0100-01-12 00:00:00 [timezone_type] => 2 [timezone] => GMT) 

DateTime Object ([date] => 0100-01-15 00:00:00 [timezone_type] => 2 [timezone] => GMT) 

你可以看到,DateTime不代表相同的日期

我可以從這些字符串中生成一個有效的DateTime嗎?

更新:

我tryed使用createFromFormat

$startDate=$request->query->get('start'); 
    $endDate=$request->query->get('end'); 

    $start=new \DateTime::createFromFormat('D M d Y h:i:s e+O (T)',$startDate); 
    $end=new \DateTime::createFromFormat('D M d Y h:i:s e+O (T)',$endDate); 

但導致異常:

FatalErrorException: Parse: syntax error, unexpected 'createFromFormat' (T_STRING), expecting variable (T_VARIABLE) or '$' in 

我也tryed:

$start=new \DateTime(\DateTime::createFromFormat('D M d Y h:i:s e+O (T)',$startDate)); 
    $end=new \DateTime(\DateTime::createFromFormat('D M d Y h:i:s e+O (T)',$endDate)); 

但是,從現在(2014年1月21日12時28分57秒)創建日期新的日期

我只是不得到它的權利。

任何幫助,在此先感謝!

+0

只是爲了文檔,總是修剪你的時間戳。我使用'DateTime :: createFromFormat()'時,最後有一個空格,並且出現錯誤。 –

回答

1

您的輸入日期時間字符串Wed Jan 12 2011 00:00:00 GMT 0100 (CET)DateTime()strtotime()中無效/標準。見date_parse()函數來查看你的時間字符串是如何被解析:

print_r(date_parse('Wed Jan 12 2011 00:00:00 GMT 0100 (CET)')); 

demo

使用DateTime::createFromFormat()靜態方法來根據具體的格式返回日期對象。

demo

+0

非常感謝,有沒有辦法操縱日期字符串,所以它可以被解析?不幸的是我不能改變dateString之前傳入該方法,或者「createFromFormat()」如何查找我的情況?對不起,我有一個完整的新手日期 –

+0

@johnSmith:就像我說的,使用'DateTime :: createFromFormat()'。我也給你一個演示... –

+0

我tryed和更新我的問題,我做什麼錯了? –

1

您可能使用的日期格式是RFC2822。如PHP date()頁所示: 2000年12月21日星期四16:01:07 +0200

您切換了月份和日期部分,PHP無法確定正確的部分。

最佳做法是使用Unix時間戳(Epoch後的秒數)或更好的格式,如ISO 8601(2004-02-12T15:19:21 + 00:00)。

+0

嘿,謝謝。我怎樣才能做到這一點 ?在進入方法之前,我無法更改DateString。我嘗試了一些與createFromFormat的東西,但不起作用,你有一個想法? –

+0

你應該改變你的發送應用程序。你可以控制發件人嗎?也許你給我們一些關於發件人的更多信息? 我不會在解析它之前嘗試修改日期字符串,這隻會導致更多的問題。經驗法則是,如果PHP不能解析你的日期,你也不應該。 – ToBe