2013-12-10 3 views
0

У меня есть функция, которая будет вычислять время между двумя датами/временем, но у меня есть небольшая проблема с возвратом.Ошибка коррекции дат JavaScript

Вот как я собираю информацию.

Дата начала Start Time Окончание Дата Окончание Время Часы

А вот функция, которая вычисляет дату и время:

function calculate (form) { 
    var d1 = document.getElementById("date1").value; 
    var d2 = document.getElementById("date2").value; 
    var t1 = document.getElementById("time1").value; 
    var t2 = document.getElementById("time2").value; 
    var dd1 = d1 + " " + t1; 
    var dd2 = d2 + " " + t2; 
    var date1 = new Date(dd1); 
    var date2 = new Date(dd2); 
    var sec = date2.getTime() - date1.getTime(); 
    if (isNaN(sec)) { 
     alert("Input data is incorrect!"); 
     return; 
    } 
    if (sec < 0) { 
     alert("The second date ocurred earlier than the first one!"); 
     return; 
    } 
    var second = 1000, 
     minute = 60 * second, 
     hour = 60 * minute, 
     day = 24 * hour; 
    var hours = Math.floor(sec/hour); 
    sec -= hours * hour; 
    var minutes = Math.floor(sec/minute); 
    sec -= minutes * minute; 
    var seconds = Math.floor(sec/second); 
    var min = Math.floor((minutes * 100)/60); 
    document.getElementById("result").value = hours + '.' + min; 
} 


Если я поставил сегодняшнюю дату для обоих полей даты, а затем 14:30 в поле первого времени и 15:35 во втором поле времени, результат будет показан как 1,8, и это должно быть 1.08

Я не сделал напишите эту функцию, но мне интересно, может ли кто-нибудь сказать мне, как сделать это изменение?

спасибо.

+0

спросил раньше .. много раз: http://stackoverflow.com/questions/10696654/get-total-time-difference-between-two-dates-using-php – Hardy

+1

@ Харди правда, у него есть, но этот конкретный вопрос - плохой пример. Это в PHP. – Markasoftware

+0

да, разделите его на один :) – Hardy

ответ

0

Не понимаю, почему 15:35 - 14:30 = 1.08 полезно?

Попробуйте вместо этого:

function timediff(date1, date2) { 
     //Get 1 day in milliseconds 
     var one_day=1000*60*60*24; 

     // Convert both dates to milliseconds 
     var date1_ms = date1.getTime(); 
     var date2_ms = date2.getTime(); 

     // Calculate the difference in milliseconds 
     var difference_ms = date2_ms - date1_ms; 
     //take out milliseconds 
     difference_ms = difference_ms/1000; 
     var seconds = Math.floor(difference_ms % 60); 
     difference_ms = difference_ms/60; 
     var minutes = Math.floor(difference_ms % 60); 
     difference_ms = difference_ms/60; 
     var hours = Math.floor(difference_ms % 24); 
     var days = Math.floor(difference_ms/24); 

     return [days,hours,minutes,seconds]; 
    } 

function calculate (form) { 
    var d1 = document.getElementById("date1").value; 
    var d2 = document.getElementById("date2").value; 
    var t1 = document.getElementById("time1").value; 
    var t2 = document.getElementById("time2").value; 
    var dd1 = d1 + " " + t1; 
    var dd2 = d2 + " " + t2; 
    var date1 = new Date(dd1); 
    var date2 = new Date(dd2); 

    var diff = timediff(date1, date2); 

    document.getElementById("result").value = diff[1] + ':' + diff[2]; 
} 
1

Если я правильно понимаю, единственная проблема, с которой вы сталкиваетесь, заключается в том, что минуты не заполняются нулями. Если это так, то вы можете подушечка значение min с нулями, используя эту маленькую хитрость:

("00" + min).slice(-2) 
+0

Ваш ответ bwtter, чем мой, + 1. – Yogesh

0

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

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