php添加和减去时间

时间:2014-03-24 19:16:31

标签: php

我试图编写一个可以解决数小时的小脚本。

我想要一个旅行时间,开始时间和结束时间。我遇到的问题是获得总时间。

$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'

2 个答案:

答案 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