【问题标题】:php adding and subtracting timephp加减时间
【发布时间】:2023-03-23 18:03:01
【问题描述】:

我正在尝试编写一个可以运行数小时的小脚本。

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

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

我明白它为什么错了,但不知道如何解决它。我无法将半小时的时间值更改为 0.50,因为该值来自 jquery 插件。任何帮助将不胜感激。

//更新

$a = new DateTime($_POST['start']);
$b = new DateTime($_POST['finish']);
$interval = $a->diff($b);

echo $interval->format("%H");

这很好用,唯一的问题是我如何显示小时和分钟,例如'9.00'

【问题讨论】:

  • 如果您要进行日期数学运算,请使用实际的小时和分钟,而不是小数。
  • 或者更好的是,使用DateTime() 函数来执行此操作。
  • 当您使用这些小数进行数学运算时,请记住,在实际小时数中,0.30 等于小数点 0.5
  • 如果您选择将时间格式化为 hh.mm,如果它被解释为小数值(7.30 => 7 和 3/10 小时),请不要感到惊讶。您必须将 7.30 转换为 7.5(7 个半小时)才能使正常数学正常工作。附言不要忘记在一天结束时处理环绕式(过夜旅行)。

标签: php


【解决方案1】:

更新

既然你改变了你的问题... 查看 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;
}

【讨论】:

  • 为帮助干杯。非常感谢
【解决方案2】:

你可以试试这样的

<?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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-30
    • 2011-07-24
    • 1970-01-01
    相关资源
    最近更新 更多