2011-09-06 56 views
1

我有這樣的代碼:Zend_Date的運算增加時區以減法結果

<?php 
    $start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601); 
    $end = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601); 
    echo $end->sub($start); 
?> 

總之:我創建了兩個日期,與他們之間的微小的差異。然後我打印出它們之間的差異(減法)。

的結果,卻是:

01-01-1970 2時01分00秒

基本上,我從這種行爲理解爲了Zend_Date約會操作時無需服用時區考慮在內,然後將時區放回結果中。當然,這意味着減法結果被時區值(在我的情況下爲+ 2h)關閉。

解決此問題的最佳方法是什麼?

回答

1

是的,當回顯一個Zend_Date時,它會考慮您的時區。要獲取格式化爲GMT日期的不同,你必須明確地設置時區:

$start = new Zend_Date("2011-09-06T10:00:00+02:00",Zend_Date::ISO_8601); 
$end = new Zend_Date("2011-09-06T10:01:00+02:00",Zend_Date::ISO_8601); 
echo $end->sub($start)->setTimezone('GMT')->get(Zend_Date::ISO_8601); 

這將輸出:1970-01-01T00:01:00 + 00:00

在旁註,如果您不需要Zend_Date的動態本地化功能,最好避免使用它或PHP's native DateTime API。僅僅因爲Zef_Date存在於ZF中,實際上沒有理由使用Zend_Date。 PHP自己的DateTime API更快,更易於使用。掌握日期時間API的時間差將是

$start = new DateTime("2011-09-06T10:00:00+02:00"); 
$end = new DateTime("2011-09-06T10:01:00+02:00"); 
echo $start->diff($end)->format('%H:%I:%S'); 

這將輸出00:01:00

+0

謝謝你,既爲解決方案和性能提示:)。 – mingos