DateTime类如果没有显示正确的数据

时间:2013-03-21 17:31:10

标签: php datetime

我第一次使用DateTime类在不同的时区之间进行转换。

这就是我所拥有的

$USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles');
$UTC = new DateTimeZone('UTC');
$schedule_date = new DateTime($call['triggerOn'], $USER_TIME_ZONE);
echo $schedule_date->format('m/d/Y h:i A');

$schedule_date = new DateTime($call['triggerOn'], $UTC);
echo $schedule_date->format('m/d/Y h:i A');

以下是我如何查看结果并尝试转换它们

foreach ( $activities AS $call){ 
    $USER_TIME_ZONE = new DateTimeZone('America/Los_Angeles');
    $UTC = new DateTimeZone('UTC');
    $schedule_date = new DateTime($call['triggerOn'], $UTC);
    echo $schedule_date->format('m/d/Y h:i A');
 }

以下是$ call ['triggerOn']

的值
2013-02-27 18:00:37
2013-02-02 01:11:07
2013-01-10 17:12:14
2013-02-27 22:29:42
2013-02-27 22:28:38
2013-02-25 21:53:12
2013-02-14 14:35:48
2012-12-13 14:03:16
2013-03-04 19:04:20
2013-03-01 18:52:48
2013-03-05 15:46:56
2013-03-11 15:26:17
2013-02-07 18:17:30
2013-03-05 18:04:25

我的两个输出都是一样的!我不明白为什么。我是否需要在服务器端进行配置,因为我在Windows Server 2008 R2上运行了PHP。 感谢您的帮助和时间。

2 个答案:

答案 0 :(得分:1)

DateTime :: format()方法返回创建数据的时区中的时间。没有转换。因此,无论您传入的时区如何,您的输出时间都将与输入时间相同。您可以通过在format参数中添加“e”来验证这一点。你会看到,在第一种情况下,时区是America / Los_Angeles,第二种情况是UTC。

你可能想要在时区之间转换时间,对吧?为了做到这一点,只需在一个时区中创建一个新的DateTime对象,使用第二个时区调用setTimezone方法,然后格式化结果。

所有这些都假设$ call ['triggerOn']值既不是时间戳也不是标识时区的值。在这种情况下,将忽略DateTime构造函数的第二个参数。

答案 1 :(得分:0)

知道$ call [' triggerOn']的价值会有所帮助,但这会有效:

$USER_TIME_ZONE = 'America/Los_Angeles';
$UTC = 'UTC';
$schedule_date = new DateTime( $call['triggerOn'], $USER_TIME_ZONE );
echo $schedule_date->format( 'm/d/Y h:i A' );

$schedule_date = new DateTime( $call['triggerOn'], $UTC );
echo $schedule_date->format( 'm/d/Y h:i A' );

基本上,如果您只使用时区字符串,而不是创建新的DateTime对象以用作其他新DateTime对象的参数?这有用吗?