我试图编写一个可以解决数小时的小脚本。
我想要一个旅行时间,开始时间和结束时间。我遇到的问题是获得总时间。
$travel = $_POST['travel']; // -- 1.00 (1 hour)
$start = $_POST['start']; // -- 7.30
$finish = $_POST['finish']; // -- 16.00
因此总时间为(16.00 - 7.30)+ 1.00 = 9.5小时
但这不起作用,因为16.00 - 7.30 = 8.7,然后再加上1 = 9.7。
我明白为什么错了,但不知道如何解决它。我不能将时间值更改为.50半小时,因为该值来自jquery插件。任何帮助将不胜感激。
// update
$a = new DateTime($_POST['start']);
$b = new DateTime($_POST['finish']);
$interval = $a->diff($b);
echo $interval->format("%H");
这很好用,唯一的办法是如何显示小时和分钟,例如'9.00'
答案 0 :(得分:3)
既然你改变了你的问题...... 查看 DateTime :: format()的语法,
echo $interval->format("H.i");
应该为您提供所需的格式。
处理时间的最简单方法是将每个时间表示为秒数。 (如果是日期,请使用自纪元以来的秒数。)您可以编写一些辅助函数,将时间转换为您想要的格式。
例如,
16.00 -> 57600
7.30 -> 27000
1.00 -> 3600
(57600 - 27000) + 3600 = 34200
34200 -> 9.30
这是我提出的辅助功能:
function timeToSeconds ($time) {
$hours = floor($time);
$minutes = ($time - $hours) * 100;
$seconds = ($hours * 3600) + ($minutes * 60);
return $seconds;
}
function secondsToTime ($seconds) {
$hours = floor($seconds / 3600);
$minutes = ($seconds - ($hours * 3600)) / 60;
$time = "" . $hours . "." . $minutes;
return $time;
}
答案 1 :(得分:0)
你可以试试这样的事情
<?php
$travel =1.00; // -- 1.00 (1 hour)
$start = 7.30; // -- 7.30
$finish = 16.00; // -- 16.00
//do the sum
$sum = $finish-$start+$travel;
//get minutes
$exp = explode(".",$sum);
$minutes = $exp[1];
//if $minutes has only one digit, add a 0
if(strlen($minutes)<2){$minutes .= 0;}
//if $minutes are more than 59, convert them in hours
if($minutes>59){
//it would be $sum-0.6+1
$new_sum = $sum+0.4;
}
else{
$new_sum = $sum;
}
echo $minutes.'<br>'.$sum.'<br>'.$new_sum;
?>
此示例将输出 70 9.7 10.1