简体   繁体   English

如何计算JavaScript中两个“ HHmm”之间的小时数?

[英]How do I calculate hours between two 'HHmm' in Javascript?

Is it possible to calculate the number of minutes or hours between two 'HHmm' strings. 是否可以计算两个“ HHmm”字符串之间的分钟或小时数。

Javascript example: JavaScript示例:

var now = 2050,
    next = 0850,
    minutesUntilNext = *now until then code*,
    hoursUntilNext = *minutes to hours code*;

I do not have access to the actual Date objects which is why this is slightly harder. 我无权访问实际的Date对象,这就是为什么这有点难的原因。 I am however using moment.js so if you have suggestions for how to use that in this situation, that would be perfect. 但是,我正在使用moment.js,因此,如果您对在这种情况下如何使用它有任何建议,那将是完美的。

This is pretty trivial with some basic division and subtraction: 通过一些基本的除法和减法,这是非常简单的:

// http://stackoverflow.com/a/10075654/560648
function padDigits(number, digits) {
    return Array(Math.max(digits - String(number).length + 1, 0)).join(0) + number;
}

/**
 * Given two times in HHMM format, returns the timespan between them
 * in HH:MM format.
 * 
 * %next is assumed to come later than %now, even if its absolute value
 * is lower (so, the next day).
 */
function compareTimes(now, next) {

   // Perform hours validation before we potentially add 24 hours (see below)
   if (now >= 2400 || next >= 2400)
      throw "Hours out of bounds";

   // If next is "earlier" than now, it's supposed to be tomorrow;
   // adding 24 hours handles that immediately
   if (next < now) next += 2400;

   // Split inputs into hours and minutes components
   now  = [parseInt(now  / 100, 10), now  % 100];
   next = [parseInt(next / 100, 10), next % 100];

   // Finally, validate the minutes
   if (now[1] >= 60 || next[1] >= 60)
      throw "Minutes out of bounds";

   // Perform the comparisons
   var minutesUntilNext = next[1] - now[1];
   var hoursUntilNext   = next[0] - now[0];

   // And return the result
   return padDigits(hoursUntilNext, 2) + ':' + padDigits(minutesUntilNext, 2);
}

console.log(doThisThing(2050, 0850));  // 12:00
console.log(doThisThing(2300, 0145));  // 02:45
//console.log(doThisThing(2500, 0000));  // error
//console.log(doThisThing(2460, 0000));  // error

It's just a math problem... 只是数学问题而已...

It could look like this: 它可能看起来像这样:

 var now = 2230; var then = 529; function calculateMinutesDifference(now, then){ var nowMinutes = getMinutes(now); var thenMinutes = getMinutes(then); return thenMinutes >= nowMinutes ? thenMinutes - nowMinutes : (thenMinutes+60) - nowMinutes; } function calculateHoursDifference(now, then){ var nowHours = getHours(now); var thenHours = getHours(then); return then >= now ? thenHours - nowHours : (thenHours+(calculateMinutesDifference(now,then) == 0 ? 24 : 23)) - nowHours; } function getMinutes(time){ return time % 100; } function getHours(time){ return (time - getMinutes(time))/100; } alert("minutes difference: " + calculateMinutesDifference(now, then)); alert("hours difference: " + calculateHoursDifference(now, then)); 

Remember not to use leading 0 when you have hour < 10, becouse then javascript will think it's not decimal number. 请记住,当小时<10时不要使用前导0,因为JavaScript会认为它不是十进制数。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM