2014-09-06 249 views
-1

有人可以向我解釋這裏發生了什麼嗎?將日期時間轉換爲另一日期時間

<?php 
$date= \DateTime::createFromFormat("H:i:s", "17:30:23"); 
var_dump($date); 
$date = new DateTime('@' . $date->format('U')); 
var_dump($date); 

輸出:

object(DateTime)#1 (3) { 
    ["date"]=> string(19) "2014-09-06 17:30:23" 
    ["timezone_type"]=> int(3) 
    ["timezone"]=> string(16) "Europe/Amsterdam" 
} 

object(DateTime)#2 (3) { 
    ["date"]=> string(19) "2014-09-06 15:30:23" 
    ["timezone_type"]=> int(1) 
    ["timezone"]=> string(6) "+00:00" 
} 

如何從一個日期時間轉移的時間到另一個,所以它是完全一樣的? 我問,因爲我有我自己的日期類,它擴展了我需要使用的\DateTime,但是我的源是一個常規的\DateTime對象。

在行動:http://3v4l.org/uEQES#v530

+0

* 「我問,因爲我有我自己的日期類延伸\日期時間」 - - 你應該顯示它。另外,這樣做可能會產生一些意想不到的影響。 – 2014-09-06 20:48:49

+0

它什麼都不做。只需要一個'__toString()'方法。無論如何,這並不重要,上面的例子使用標準的'\ DateTime'類,問題仍然存在。 – 2014-09-06 20:55:03

回答

2

你只需要改變你的DateTime對象是在同一個時區。在這種情況下,我使用UTC,因爲Unix的時間戳總是在UTC:

$date= \DateTime::createFromFormat("H:i:s", "17:30:23"); 
$date->setTimezone(new DateTimeZone('UTC')); 
var_dump($date); 
$date = new DateTime('@' . $date->format('U')); 
var_dump($date); 

See it in action

如果你想回到你的時區使用:

$date= \DateTime::createFromFormat("H:i:s", "17:30:23"); 
var_dump($date); 
$date = new DateTime('@' . $date->format('U')); 
$date->setTimezone(new DateTimeZone('Europe/Amsterdam')); 
var_dump($date); 

See it in action

+0

謝謝,現在更有意義! – 2014-09-06 21:49:29

相關問題