2013-07-24 4 views
1

Я имею эту функциюJavascript Разница во времени Расчет

function timeCalculator(form) 
{ 
    var currentTimeAndDate = new Date(); 
    var userTimeAndDate = form.userDate.value; 
    var userUTCOffset2 = form.userUTCOffset.value; 
    var userDate = new Date(userTimeAndDate); 
    var tzDifference = currentTimeAndDate.getTimezoneOffset() + (userUTCOffset2 - currentTimeAndDate.getTimezoneOffset()); 
    var timeDifference = new Date((userDate.getTime()+(tzDifference*60*1000))-(currentTimeAndDate.getTime()+(userDate.getTimezoneOffset()*60*1000))); 

    var hours = Math.floor(timeDifference.getTime()/36e5), 
    minutes = Math.floor(timeDifference.getTime() % 36e5/60000), 
    seconds = Math.floor(timeDifference.getTime() % 60000/1000); 

    document.getElementById('result').innerHTML = "There is exactly "+hours+" hours,"+minutes+"minutes and "+seconds+" seconds left until your specified time."; 
} 

Что это должно сделать, это пользователь вводит время, дату и UTC смещение в форме и, основываясь на том, что он вычисляет, сколько времени осталось до это пункт. Кажется, что минуты и секунды работают нормально, но есть проблемы с часами. У кого-нибудь есть предложения или, может быть, другой подход к чему-то подобному? Также как я могу добавить дни, месяцы, годы в разницу?

ответ

2

Я рекомендую использовать для этого moment.js. Это сэкономит вам много горя.

function timeCalculator(form) 
{ 
    // get a moment based on the user input 
    var m = moment(form.userDate.value).zone(form.userUTCOffset.value); 

    // calculate a duration of time passed between now and that moment 
    var now = moment(); 
    var d = moment.duration(m - now); 

    // build your output string 
    var s = d.hours() + " hours, " + 
      d.minutes() + " minutes, and " + 
      d.seconds() + " seconds"; 

    // set the output html 
    document.getElementById('result').innerHTML = "There are exactly " + s + 
              " left until your specified time."; 
} 

Это предполагает выбранную дату в будущем и что вы всегда хотите показывать часы, минуты и секунды.

Вы могли бы вместо этого рассмотрят более обобщенный подход, который показывает в приближения времени из-за или остающееся:

function timeCalculator(form) 
{ 
    // get a moment based on the user input 
    var m = moment(form.userDate.value).zone(form.userUTCOffset.value); 

    // get a humanized duration string 
    var s = m.fromNow(true); 

    // set the output html 
    document.getElementById('result').innerHTML = "There are " + s + 
              " left until your specified time."; 
} 

Посмотреть документацию на fromNow для получения подробной информации о ожидаемом результате.

Как в стороне, кажется немного странным передавать в форме и задавать результат в жестко закодированном элементе. Вы можете просто передать значения формы и вернуть результат строки, позволяя вызывающей стороне вашей функции обрабатывать, откуда они пришли, и перейти к.

+0

Это довольно круто. Большое спасибо человеку. –

+0

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

+0

Благодарим вас за указание на момент.js, чтобы спасти нас от агонии. – Herr