2016-10-28 53 views
0

我使用下面的函數來檢查兩個日期在日期時間差異法夏天的時間來處理

function calcNumberOfNights ($checkin, $checkout) 
{ 
    $checkinDate = new DateTime($checkin); 
    $checkoutDate = new DateTime($checkout); 
    $interval = $checkoutDate->diff($checkinDate); 
    return $interval->days; 
} 

爲了測試之間的天差,我用下面的代碼

$in = '2016-10-15'; 
$out = '2016-10-18'; 
var_dump(calcNumberOfNights($in,$out));//print '3' 

所有的工作都很好,除非我試圖計算10月16日到10月18日之間的時間間隔。

$in = '2016-10-16'; 
$out = '2016-10-18'; 
var_dump(calcNumberOfNights($in,$out)); //print '1' 

它返回1,當在這種情況下正確的輸出應該是'2'。

我認爲問題出在時區。它使用巴西時區,2016年10月16日是巴西夏季的第一天(加上一小時)。

我的問題是:我怎樣才能避免這種類型的錯誤,但保持我的默認時區?

我在SO搜索了類似的問題,但沒有找到任何東西。

+1

問題像這樣的我把我的服務器的時區和所有的時間計算爲UTC的原因。我只轉換爲用戶時區進行演示。 – vascowhite

回答

1

設置時區爲UTC您的日期時間:

function calcNumberOfNights ($checkin, $checkout) 
{ 
    $timezone = new DateTimeZone('UTC'); 
    $checkinDate = new DateTime($checkin, $timezone); 
    $checkoutDate = new DateTime($checkout, $timezone); 
    $interval = $checkoutDate->diff($checkinDate); 
    return $interval->days; 
}