Javascript - Как я могу определить разницу между двумя указанными временами?(часы-минуты) - PullRequest
1 голос
/ 26 августа 2010

У меня есть два набора элементов «выбор», в которые пользователь может войти два раза. Это выглядит так:

Start:
[hour] [minute] [meridian]

End:
[hour] [minute] [meridian]

Я пытаюсь взять те времена и выяснить разницу. Поэтому я могу вывести:

Difference: 1.25 HRS

Десятичный формат, как вы, наверное, знаете, означает 1 час 15 минут. Также есть флажок, который пользователь может щелкнуть, который, если выбран, отнимет 30 минут. Вот как выглядит мой текущий код:

var startHours     = parseInt($start.find('.times:eq(0)')[0].value);
var startMinutes   = parseInt($start.find('.times:eq(1)')[0].value);
var startMeridian  = $start.find('.times:eq(2)')[0].value

if (startMeridian == 'PM')
   startHours += 12;

var finishHours    = parseInt($finish.find('.times:eq(0)')[0].value);
var finishMinutes  = parseInt($finish.find('.times:eq(1)')[0].value);
var finishMeridian = $finish.find('.times:eq(2)')[0].value

if (finishMeridian == 'PM')
   finishHours += 12;

// compute the difference
var completeHours   = finishHours - startHours;
var completeMinutes = finishMinutes - startMinutes;
var newTime = 0;

if (completeHours < 0 || completeMinutes < 0)
   newTime = '0.0';
else
   newTime = completeHours + '.' + completeMinutes; 

var hadBreak = $parent.parents('tr').next('tr').find('.breakTaken')[0].checked;

if (hadBreak)
{
   time    = newTime.split('.');
   hours   = time[0];
   minutes = time[1];

   minutes = minutes - 30;

   if (minutes < 0)
   {
      minutes = 60 - (minutes * 1);
      hours   = hours - 1;
   }

   newTime = (hours < 0) ? '0.0' : hours + '.' + minutes;
}

$parent.parents('tr').next('tr').find('.subtotal')[0].innerHTML = newTime;

total += parseFloat(newTime);

Не получается ... Что я делаю не так?

Ответы [ 2 ]

0 голосов
/ 26 августа 2010

Линия

 newTime = (hours < 0) ? '0.0' : hours + '.' + minutes;

неверно - минут может быть 15, но вы хотите распечатать дробь. Следовательно вам нужно:

 var MinutesDisplay = minutes/60*100;
 newTime = (hours < 0) ? '0.0' : hours + '.' + (MinutesDisplay.toFixed(0));
0 голосов
/ 26 августа 2010

Чтобы избавить вас от лишних хлопот, я бы порекомендовал использовать объект Дата , что очень удобно:

var startDate = new Date(year, month, date, hour, minute, second, millisecond);
var endDate = new Date(year, month, date, hour2, minute2, second2, millisecond2);
// You can skip hours, minutes, seconds and milliseconds if you so choose

var difference = endDate - startDate; // Difference in milliseconds

Отсюда вы можете рассчитывать прошедшие дни, часы и минутымежду этими двумя датами.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...