2012-05-11 49 views
0

我想計算兩個Zend_Date的運算對象之間的時間差(倒計時計算器):Zend_Date的運算::子()和ISO_8601計算小時的時差錯誤

$now = new Zend_Date($now_datetime, Zend_Date::ISO_8601); 
$end= new Zend_Date($end_datetime, Zend_Date::ISO_8601); 
echo $now->getIso(); 
echo $end->getIso(); 

$expires=array(); 
$expires['expired']=false; 
if($end->isEarlier($now)){ 
    $expires['expired']=true; 
    return $expires; 
} 

$dif=$end->sub($now); 
$expires['days']=($dif->getDay()->toValue()/(60*60*24)); 
$expires['hours']=($dif->getHour()->toValue()/(60*60)); 
$expires['minutes'] = $dif->getMinute()->toValue()/60; 
$expires['seconds'] = $dif->getSecond()->toValue(); 

var_dump($expires); 

爲$ now_datetime =」 2012-06-30 01 :01:01 '和$ end_datetime =' 2012-06-30 23:59:59」,結果是

2012-06-30T01:01:01+02:00 
2012-06-30T23:59:59+02:00 
//array 
'expired' => boolean false 
'days' => int 0 
'hours' => int 22 
'minutes' => int 58 
'seconds' => int 58 

,這是確定。

但是對於$ now_datetime = '2012-06-30 0時01分01秒 '和$ end_datetime =' 2012-06-30 23:59:59',結果是

2012-06-30T00:01:01+02:00 
2012-06-30T23:59:59+02:00 
//array 
'expired' => boolean false 
'days' => int 1 
'hours' => int -1 
'minutes' => int 58 
'seconds' => int 58 

這是不正確的。我預計'小時'是,而不是-1?!

我使用php 5.3運行MAMP,Zend_Framework 1.10。 那有什麼問題? ISO_8601用於MySQL的日期時間「的數據,我不wanto更改爲mktime()...

+0

$ dif-> getIso()返回什麼? – ccKep

+0

你的代碼對我來說是完美的..我使用zf 1.11 php5.3和zend社區服務器..可能是你的mamp的一些默認設置正在妨礙你的結果... – Jaimin

+0

@ccKep - $ dif-> getIso()返回'1970-01-02T00:58:58 + 01:00' –

回答

1

嘗試設置

date_default_timezone_set('UTC'); 

在你的index.php ..它會正常工作。 。

+0

正確,添加你的代碼解決了問題!謝謝Jaimin –