2014-09-06 214 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

相关问题