[英]How do I calculate hours between two 'HHmm' in Javascript?
是否可以计算两个“ HHmm”字符串之间的分钟或小时数。
JavaScript示例:
var now = 2050,
next = 0850,
minutesUntilNext = *now until then code*,
hoursUntilNext = *minutes to hours code*;
我无权访问实际的Date对象,这就是为什么这有点难的原因。 但是,我正在使用moment.js,因此,如果您对在这种情况下如何使用它有任何建议,那将是完美的。
通过一些基本的除法和减法,这是非常简单的:
// 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
只是数学问题而已...
它可能看起来像这样:
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));
请记住,当小时<10时不要使用前导0,因为JavaScript会认为它不是十进制数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.