2012-05-11 5 views
0

間違っISO_8601計算時間の時差:「= now_datetime $について2012-06-30 01はZend_Date ::サブ()と私は(カウントダウン電卓用)2はZend_Dateオブジェクト間の時間差を計算したい

$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); 

を: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 

あり、それはOKです。

しかしnow_datetimeのために$のために= '2012-06-30午後12時01分01秒 'と' 2012-06-30 23時59分59秒'、結果はend_datetime =である$

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、Zend_Framework 1.10でMAMPを実行しています。 何が問題なのですか? ISO_8601はMySQLの「日時」データのために使用されていると私はmktime関数(に変更するwantoはありません)...

+0

$ dif-> getIso()は何を返しますか? – ccKep

+0

あなたのコードは私にとって完璧に動作します..私はzf 1.11 php5.3を使用しており、コミュニティサーバーをzendしています。あなたのマンプのデフォルト設定があなたの結果を妨げているかもしれません... – Jaimin

+0

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

答えて

1

があなたのindex.phpに

date_default_timezone_set('UTC'); 

を設定しようとする...それが正常に動作します。

+0

問題を解決したコードを追加してください。ありがとうJaimin –

関連する問題