当前位置:  开发笔记 > 编程语言 > 正文

计算午夜时间差异

如何解决《计算午夜时间差异》经验,为你挑选了2个好方法。

这是我永远无法工作的一件事.
我的问题是检测一天的结束和下一天的开始,然后将差异分成每一天.

想象一下,你想要计算工资率,但它必须跨越午夜.

它也适用于计算在定时系统上运行的时间,或它应该运行的时间差.



1> UnkwnTech..:

我更喜欢在Unix Epoch中记录所有时间,就像它一样简单

hoursWorked = ((stopTime - startTime)/60)/60

这是一个完整的解决方案,它在PHP中,但应该很容易构建到任何语言:

 date2epoch($startTime[0]))
     {
        $minutesWorked1 = (59 - $startTime[1][1]); //Calculate how many minutes have occured from begining of shift to midnight
        $minutesWorked2 = $endTime[1][1]; //Number of minute from midnight to end of shift
        $hoursWorked1 = (23 - $startTime[1][0]);//Number of hours from start of shift to midnight
        $hoursWorked2 = $endTime[1][0];//Number of minutes from midnight to end of shift
        echo 'Before midnight you worked ' . $hoursWorked1 . ':' . $minutesWorked1 . "\nAfter midnight you worked " . $hoursWorked2 . ':' . $minutesWorked2 . '.';
     }
    else 
     {
        //SOMETHING MAJOR BAD HAS HAPPENED WHILE LOGGING THE CLOCKINS AND CLOCKOUTS
     }
 }
else 
 {
    echo 'Today you worked ' . ($endTime[1][0] - $startTime[1][0]) . ':' . ($endTime[1][1] - $startTime[1][1]);
 }
function date2epoch($date, $format='m/d/Y')
 {
    $date = split('/', $date);
    return mktime('0', '0', '0', $date[0], $date[1], $date[2]);
 }
?>



2> Robert Rossn..:

在系统中,这显然是一个微不足道的问题,其中起始和结束时间是包含日期和时间的数据结构.但是有很多系统没有这样做.计时系统常常有一条包含日期,开始时间和结束时间的记录.在这种情况下,问题不那么重要.

我想,有两个问题你要问:

    如何判断时间跨度是否超过午夜?

    如果时间跨度超过午夜,第一天发生了多少时间,第二天发生了多少时间?

第一个问题很容易回答:如果结束时间在开始时间之前,则时间跨度已经过了午夜.

如果是这种情况,那么您有两个要计算的金额.日期发生的时间跨度是从开始时间到午夜之间的时间.下一个日期发生的时间跨度是午夜和结束时间之间的时间(即结束时间).

推荐阅读
地之南_816
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有