我正在尝试计算在这里工作的人的班次模式,从结束时间减去开始时间大部分工作,但不是如果他们在一夜之间工作。例如,在10pm to 6am
工作的人将显示为:
22:00 - 06:00
我希望返回8 hours
,但我无法找到最佳方法。
令人讨厌的是,我将不得不在Javascript中做同样的事情,所以我希望我能够理解这个逻辑。在这种情况下,从另一个中取走一个日期不起作用......
非常感谢任何帮助,谢谢!
答案 0 :(得分:6)
function timeDiff($firstTime,$lastTime) {
$firstTime=strtotime($firstTime);
$lastTime=strtotime($lastTime);
$timeDiff=$lastTime-$firstTime;
return $timeDiff;
}
echo (timeDiff("10:00","12:00")/60)/60;
最初在此处写到:http://andrewodendaal.com/php-hours-difference-hhmm-format/
答案 1 :(得分:5)
老派,有字符串操作和数学:
$input = '22:00 - 06:00';
preg_match('/(\d+):(\d+)\D*(\d+):(\d+)/', $input, $matches);
list(, $startHour, $startMin, $endHour, $endMin) = $matches;
$totalMinutes = ($endHour * 60 + $endMin - $startHour * 60 + $startMin + 1440) % 1440;
$hours = floor($totalMinutes / 60);
$mins = $totalMinutes % 60;
echo "works for $hours hours, $mins minutes";
使用日期/时间功能:
$input = '22:00 - 06:00';
list($start, $end) = array_map('trim', explode('-', $input));
$start = new DateTime($start.'+00:00');
$end = new DateTime($end.'+00:00');
if ($start > $end) $start->sub(new DateInterval('P1D'));
$interval = $end->diff($start);
echo "works for ".$interval->h." hours, ".$interval->m." minutes";
使用日期/时间函数的任何解决方案的恶魔:
如果您没有明确指定$start
和$end
的偏移量,我们正在谈论夜班,并且代码是在夏令时开始或结束时运行的无论DST偏移是什么都会关闭。
对于使用DateTime
,strtotime
等
答案 2 :(得分:3)
没有日期功能:
$start = '22:00';
$end = '06:00';
$getnum = function($value) {
$pieces = explode(':', $value);
if(count($pieces) > 0) {
return (intval($pieces[0])*60)+intval($pieces[1]);
}
return 0;
};
$start_num = $getnum->__invoke($start);
$end_num = $getnum->__invoke($end);
$diff = max($start_num, $end_num) - min($end_num, $start_num);
echo intval($diff / 60).'.'.($diff % 60).' hours';
答案 3 :(得分:2)
您可以使用函数mktime(http://php.net/manual/en/function.mktime.php)返回秒数,并以整数格式减去两个日期。
<?php
$date1=mktime(1, 2, 3, 4, 5, 2006);
$date2=mktime(1, 2, 3, 4, 5, 2008);
$diference=$date2-$date1;
echo $diference
?>
答案 4 :(得分:1)
工作和最简单的样本:
$start = 22;
$end = 6;
if ($start > $end) {
$end += 24;
}
$duration = $end - $start;
echo 'Duration: ' . $duration . 'hours.';
答案 5 :(得分:-1)
您可以查看date_diff
,这是此函数的别名:
http://www.php.net/manual/en/datetime.diff.php
MySQL也有一个DATEDIFF()
函数,所以如果你从数据库中获取它们,你可以直接从SQL中获取它们(我知道你没有指定,但我只是想提一下)。