Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/262.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php计算两个日期之间的剩余小时数_Php_Date_Strtotime - Fatal编程技术网

使用php计算两个日期之间的剩余小时数

使用php计算两个日期之间的剩余小时数,php,date,strtotime,Php,Date,Strtotime,我有这个约会 $dt_occ = mysql_result($info,0,"occ_data"); $dt_occ = strtotime($dt_occ); $dt_occ = strtotime('+1 day' , $dt_occ); $dt_unico = date('d/m/Y H:i',$dt_occ); $dt_il = date('d/m/Y',$dt_occ); $dt_alle = date('H:i',$dt_occ); 我需

我有这个约会

$dt_occ     = mysql_result($info,0,"occ_data");
$dt_occ     = strtotime($dt_occ);
$dt_occ     = strtotime('+1 day' , $dt_occ);
$dt_unico   = date('d/m/Y H:i',$dt_occ);
$dt_il      = date('d/m/Y',$dt_occ);
$dt_alle    = date('H:i',$dt_occ);

我需要知道从现在到$dt_unico还剩多少小时,我想这对你来说是可行的

$dt1 = new DateTime($dt_occ);
$dt2 = new DateTime($dt_occ);
$dt2->modify("+1 day");
$interval = $dt2->diff($dt1);
echo $interval->hours;
如果您使用的是PHP5.5,您可以简单地执行以下操作:

$dt1 = new DateTimeImmutable($dt_occ);
$dt2 = $dt1->modify("+1 day");
$interval = $dt2->diff($dt1);
echo $interval->hours;
看看这些类,它们比strotime()和date()灵活得多。像这样的东西对你有用:-

function getDiffInHours(\DateTime $earlierDate, \DateTime $laterDate)
{
    $utc = new \DateTimeZone('UTC');
    //Avoid side effects
    $first = clone $earlierDate;
    $second = clone $laterDate;
    //First convert to UTC to avoid missing hours due to DST etc
    $first->setTimezone($utc);
    $second->setTimezone($utc);
    $diff = $first->diff($second);
    return 24 * $diff->days + $diff->h;
}
如下图所示:-

$hours = getDiffInHours(new \DateTime($dt_occ), (new \DateTime($dt_occ))->modify('+ 1 day'));
var_dump($hours); //24

由于
$dt_unico
源自
$dt_occ
,这是一个时间戳,
time()
给出当前时间,也作为时间戳,因此从后者中减去前者将给出它们之间的间隔(以秒为单位)

现在,一小时是
60*60=3600
秒,所以:

$interval=(time()-$dt_occ)/3600;
但也有一些注意事项:

  • 我假设
    $dt_occ
    指的是过去。未来的日期将给出负结果,因此如果是这种情况,请切换减法操作数

  • 上面将给出一个浮点结果。对于积分结果,根据所需的舍入方法,使用适当的舍入函数


在您的第一行代码之后,var_dump($dt_occ)可能会给出重复的结果?但是,这会在间隔>24小时时给出奇怪的结果。也应该是echo$interval->h;此外,DateTime::sub将DateInterval作为参数,而不是DateTime。您正在查找DateTime::diff()。DateInterval对象没有
hours
属性。如果两次之间有DST更改,则会在+/-1小时内给出错误的结果。@vascowhite否不会
time()
将转换为正确的时间戳,而
$dt_occ
已经是时间戳。