我使用以下功能检查两个日期之间的天数差异
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'
当这种情况下正确的输出应该是' 2'它返回1。
我认为问题出在时区。它使用巴西时区,2016年10月16日是巴西夏季时间的第一天(加上一小时)。
我的问题是:如何避免这种类型的错误,但保留我的默认时区?
我在SO搜索了类似的问题,但没有找到任何东西。
答案 0 :(得分:1)
将DateTime的时区设置为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;
}