2015-12-03 22 views
0

我使用openssl_x509_parse()解析數字證書。DateTime :: __ construct():解析時間字符串失敗(131022120001Z),但值來自openssl_x509_parse()

我寫過一個實體類,它讀取數組並轉換對象中的值。

所以,對於日期我使用\DateTime()

問題是,有時對象的創建不會失敗,有時它確實會失敗。

因此,舉例來說,如果我得到Google.com的數字證書,我得到的結果如下排列:

... 
"validFrom" => "151118151813Z" 
"validTo" => "160216000000Z" 
"validFrom_time_t" => 1447859893 
"validTo_time_t" => 1455580800 
... 

這些字符串會導致錯誤:

DateTime::__construct(): Failed to parse time string (1474632000) at position 8 (0): Unexpected character

我不不瞭解如何將它們轉換爲DateTime對象。我做錯了什麼?

+1

'$ dto = new DateTime('@'。'1447859893');' –

回答

0

字符串151118151813Z的日期時間表示爲ymdHis祖魯時區,您可以作爲解析:

$dt = DateTime::createFromFormat('ymdHise', '151118151813Z'); 
echo $dt->format('c'); 

demo

或者只是使用Unix時間戳格式1447859893

$dt = new DateTime('@1447859893'); 
echo $dt->format('c'); 

demo

在這兩個示例中,您都會得到相同的輸出。

+0

爲什麼使用祖魯時區?有理由嗎?該值是從解析x509證書返回的:這是否重要? – Aerendir

+0

@Aerendir:必須知道時區。它的時區日期時間顯示並不重要,但實踐是設置爲UTC +00:00,即Zulu。然後,您可以將其轉換爲您希望的任何時區... –

+0

如何在祖魯時區創建'DateTime'?因爲如果我使用'DateTimeZone :: listIdentifiers()'(http://php.net/manual/en/datetimezone.listidentifiers.php),我無法找到祖魯時區。因爲我需要對從數字證書獲得的日期與當前時間進行比較(要知道證書是否有效並且未過期),我想更好地瞭解我是否可以安全地執行「新」\「 DateTime()> $ certificateFrom'(其中'$ certificateFrom'在祖魯時區,'\ DateTime()'不是))。 – Aerendir

相關問題