2011-01-27 5 views
0

мне нужно вычесть два значения времени 24-час от 0 до 23.Вычисление разницы во времени в 24-часовом

Например, 21:00 - (!) 22:00 должен возвращать 23 часа, а не -1 ч.

Меня не интересуют минуты.

Я пробовал искать, но не смог его получить. Но я чувствую, что для этого уже есть функция, поэтому не стал писать.

спасибо, все.

+1

А? Как 21: 00-22: 00 = 11 часов? –

+0

Как сделать 21 и 22 получить 11? Я имею в виду, я бы понял 23, но 11? – Nanne

ответ

1

Вычтет два раза, и, если результат отрицательный, добавьте 24.

+0

, но это получило бы 23, в этом случае не 11; ( – Nanne

+0

Не правильный ответ? – ChrisW

+0

Извините за путаницу, ребята, ответ должен прийти 23 .. а не 11. – kapeels

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, вы должны означать, что вы хотите разницу в 12-часовых часовых значений между двумя моментами, которые выражаются в 24-часовом, так вы действительно хотите модуль 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; 

Где

  • time1 и time2 должны быть в часах
  • % является оператором по модулю

Зачем добавлять 24? Добавление 24 внутри скобок приводит к проблеме неопределенного поведения при принятии по модулю отрицательных чисел. Это лучше, чем оператор if, потому что он не останавливает конвейер.

Смежные вопросы