2010-10-04 99 views
2

我有一個mktime,我想要返回一個日期時間對象。我想出了最好的方式似乎太複雜:如何從mktime到datetime對象?

DateTime::createFromFormat("Y-m-d H:i:s",date("Y-m-d H:i:s",mktime(0, 0, 0, $data[$j]['month'], $data[$j]['day'],$data[$j]['year']))); 

有什麼更好的辦法?

回答

4

DateTime constructor可以採用UNIX時間戳作爲參數,所以只使用返回值從mktime直接在構造函數如果用@前綴是:

$datetimeobject = new DateTime('@' . mktime(0, 0, 0, $data[$j]['month'], $data[$j]['day'],$data[$j]['year'])); 

或者你可以完全跳過mktime步驟,因爲DateTime也可以解析日期字符串(但是這將是更耗資源,如果你到微優化):

$datetimeobject = new DateTime($data[$j]['year'] .'-'. $data[$j]['month'] .'-'. $data[$j]['day']); 
+0

正如[DateTime的化合物格式(http://php.net/manual/en/datetime.formats.compound.php): '$ datetimeobject =新日期時間(mktime(...)) ;' 將無法​​正常工作。 你必須指定'@'操作符: '$ datetimeobject = new DateTime(「@」。mktime(...));' – pliski 2015-05-10 16:21:55

+0

你是對的,雖然我通常在回答之前測試我的代碼。我已經更新了我的答案。謝謝! – 2015-05-11 12:09:17

2

你爲什麼不弄擺脫mktime並使用DateTime類的本地方法?

$midOfDay->setTime(12, 0, 0); 
$midOfDay->setDate($data[$j]['year'], $data[$j]['month'], $data[$j]['day']); 
相關問題