2011-01-27 156 views
0

我需要减去从0两个24小时的时间值23.计算时差

例如,21:00 - (!)22:00应该返回23小时不-1小时。

我不在乎分钟。

我试过搜索,但没有得到一个。但我觉得它已经有了一个功能,所以不用写一个。

谢谢大家。

+1

咦? 21:00-22:00 = 11小时如何? – 2011-01-27 17:16:36

+0

21和22如何成为11?我的意思是,我会理解23,但是11? – Nanne 2011-01-27 17:19:54

回答

1

减去两次,如果结果是否定的,加24

0

使用模:(24+a-b)%24

(我认为11是一个错字这里了,正确答案是23)

0

只要将它们视为整数并将它们归一化为0-23。

var c = (a%24 - b%24); 
return c < 0 ? c+24; 

如果你真的认为21:00 - 22:00 == 11,你一定是说你要在两次,这是在24小时的时间表示在12小时小时值的差异,所以你真的想模12:

var c = (a%12 - b%12); 
return c < 0 ? c+12; 

回报(9 - 10)+ 12 = 11

1

我想你想要的是21:00 - 22:00给了23小时。换句话说,如果今天是10点,明天9点就是23个小时。这很容易。

hours = (time1 - time2 + 24) % 24; 

  • 时间1和时间2必须小时内给予
  • %是求余运算

为什么加24?在括号内添加24可以避免使用负数模的未定义行为的问题。这比if语句更好,因为它不会阻塞管道。