2016-09-23 7 views
2

Так я сделал функцию, чтобы определить, как долго я должен ждать, пока не прибудет BUSS:времени в калькулятор дает неправильный ответ

function arrival(arrtime){ 

      //convert to seconds 
      function toSeconds(time_str) { 
       // Extract hours, minutes and seconds 
       var parts = time_str.split(':'); 
       // compute and return total seconds 
       return (parts[0] * 3600) + (parts[1] * 60) + parts[2];// seconds 
      } 

      var a = new Date().getHours() + ":" + new Date().getMinutes() + ":" + new Date().getSeconds();//current time 

      var difference = toSeconds(arrtime) - toSeconds(a); 

      function sformat(s) { 
       var fm = [ 
         Math.floor(s/60/60/24), // DAYS 
         Math.floor(s/60/60) % 24, // HOURS 
         Math.floor(s/60) % 60, // MINUTES 
         s % 60 // SECONDS 
       ]; 
       return $.map(fm, function(v, i) { return ((v < 10) ? '0' : '') + v; }).join(':'); 
      } 

      if (difference > 0){ 
       result = sformat(difference); 
      } else if (difference < 1 && difference > -20) { 
       result = "Chegou!"; 
      } else if (difference <= -20) { 
       result = "Amanhã às " + arrtime; 
      } 

      return result; 
     } 
//usage example: 
arrival("16:30:00"); 

, но это дает мне неправильный ответ .... некоторые расчеты должны быть неправ, но для жизни меня я не могу понять это!

ответ

0

Одна из проблем, которые я нашел здесь, - это ваша функция toSeconds, вместо того чтобы сгруппировать все, она объединяет секунды как строку. Учитывая ваш пример (16:30:00), вы возвращаете 57600180000 секунд, когда вы должны возвращать 57600 + 1800 + 00 = 59400 секунд.

Попробуйте этот метод и посмотрите, приблизит ли он вас к решению оставить комментарий, если у вас есть другие проблемы.

function toSeconds(time_str) { 
    // Extract hours, minutes and seconds 
    var parts = time_str.split(':'); 

    // compute and return total seconds 
    var hoursAsSeconds = parseInt(parts[0]) * 3600; 
    var minAsSeconds = parseInt(parts[1]) * 60; 
    var seconds = parseInt(parts[2]); 

    return hoursAsSeconds + minAsSeconds + seconds; 
} 
+0

что сделал трюк, спасибо! –