Утилита javascript, которая увеличивает / уменьшает до следующего 15-минутного интервала - PullRequest
0 голосов
/ 15 октября 2010

Кто-нибудь может найти здесь ошибки или улучшения производительности?

<a href='#' id='from_arrow_down' onclick="timeOffset(-1,'from_time');">Click me</a>

function timeOffset(offset,time_id)
{

  // javascipt utility that increments/decrements to the next 15 minute interval.
  // When user pushes a button, program will get time from input box, 
  // increment (offset=1) or decrement (offset=-1) to next (or previous)
  // quarter hour and out value back to input box.

  // This is used on handheld devices where keyboard is very small and input is     
  // difficult and time consuming.

  var pass_time = document.getElementById(time_id).value;
  var tempDate;

  // break in to hours and minutes 
  var HH = pass_time.substr(0,2);
  var MM = pass_time.substr(2,4);
  // dummy date
  try{
  tempDate = new Date("2000", "01", "01", HH, MM, "00", "0000");
  }
  catch(err)
  {
   alert("invalid time (HHMM)");
   return;
  }

  // dummy minutes
  var minutes = 999;

  // iterate until we have reached an inter
  while (minutes != 0 && minutes != 15 &&  minutes != 30 && minutes != 45){
   tempDate.setMinutes( tempDate.getMinutes() + offset );
   minutes = tempDate.getMinutes();   
   document.getElementById(time_id).value = cleanUp(tempDate.getHours()) + "" + cleanUp(tempDate.getMinutes());
  }

}

function cleanUp(d)
{
  if (d < 10){
   d = "0" + d;
  }
  return d;
}

Ответы [ 2 ]

1 голос
/ 15 октября 2010

Цикл while очень не нужен для этого. Вместо этого я бы использовал setTimeout - вызывайте его каждую секунду, если вам нужно, или каждое приращение X, которое вам нужно.

0 голосов
/ 15 октября 2010

Да, вы можете просто рассчитать расстояние до следующего интервала, а затем запустить содержимое цикла while для этого значения.Вам не нужно постоянно изменять содержимое страницы с промежуточными значениями для «минут».

EG, приведите минуты к плавающей запятой, разделите на 15, используйте функцию floor / ceil для декремента /увеличить, затем умножить на 15 снова.Это просто не в моей голове, это может не сработать для угловых случаев и тому подобного.

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