時間(hh:mm:ss)同士の計算
時間(hh:mm:ss)同士の加算や減算などの計算を行うには、次のような方法で可能です。
なお、小数点以下には対応していません。
関数定義
JavaScript
var timeMath = {
/**
* 加算
*/
sum : function() {
var result, times, second,
len = arguments.length;
if (len === 0) return;
for (var i = 0; i < len; i++) {
if (!arguments[i] || !arguments[i].match(/^[0-9]+:[0-9]{2}:[0-9]{2}$/)) continue;
times = arguments[i].split(':');
second = this.toSecond(times[0], times[1], times[2]);
if ((!second && second !== 0)) continue;
if (i === 0) {
result = second;
} else {
result += second;
}
}
return this.toTimeFormat(result);
},
/**
* 減算
*/
sub : function() {
var result, times, second,
len = arguments.length;
if (len === 0) return;
for (var i = 0; i < len; i++) {
if (!arguments[i] || !arguments[i].match(/^[0-9]+:[0-9]{2}:[0-9]{2}$/)) continue;
times = arguments[i].split(':');
second = this.toSecond(times[0], times[1], times[2]);
if (!second) continue;
if (i === 0) {
result = second;
} else {
result -= second;
}
}
return this.toTimeFormat(result);
},
/**
* 乗算
*/
multiply : function() {
var result, times, second,
len = arguments.length;
if (len === 0) return;
for (var i = 0; i < len; i++) {
if (!arguments[i] || !arguments[i].match(/^[0-9]+:[0-9]{2}:[0-9]{2}$/)) continue;
times = arguments[i].split(':');
second = this.toSecond(times[0], times[1], times[2]);
if (!second) continue;
if (i === 0) {
result = second;
} else {
result *= second;
}
}
return this.toTimeFormat(result);
},
/**
* 除算
*/
division : function() {
var result, times, second,
len = arguments.length;
if (len === 0) return;
for (var i = 0; i < len; i++) {
if (!arguments[i] || !arguments[i].match(/^[0-9]+:[0-9]{2}:[0-9]{2}$/)) continue;
times = arguments[i].split(':');
second = this.toSecond(times[0], times[1], times[2]);
if (!second) continue;
if (i === 0) {
result = second;
} else {
result /= second;
}
}
return this.toTimeFormat(result);
},
/**
* 時間を秒に変換
*/
toSecond : function(hour, minute, second) {
if ((!hour && hour !== 0) || (!minute && minute !== 0) || (!second && second !== 0) ||
hour === null || minute === null || second === null ||
typeof hour === 'boolean' ||
typeof minute === 'boolean' ||
typeof second === 'boolean' ||
typeof Number(hour) === 'NaN' ||
typeof Number(minute) === 'NaN' ||
typeof Number(second) === 'NaN') return;
return (Number(hour) * 60 * 60) + (Number(minute) * 60) + Number(second);
},
/**
* 秒を時間(hh:mm:ss)のフォーマットに変換
*/
toTimeFormat : function(fullSecond) {
var hour, minute, second;
if ((!fullSecond && fullSecond !== 0) || !String(fullSecond).match(/^[\-0-9][0-9]*?$/)) return;
var paddingZero = function(n) {
return (n < 10) ? '0' + n : n;
};
hour = Math.floor(Math.abs(fullSecond) / 3600);
minute = Math.floor(Math.abs(fullSecond) % 3600 / 60);
second = Math.floor(Math.abs(fullSecond) % 60);
minute = paddingZero(minute);
second = paddingZero(second);
return ((fullSecond < 0) ? '-' : '') + hour + ':' + minute + ':' + second;
}
};
使い方
引数に算出する時間を「hh:mm:ss」の書式で指定します。
戻り値は計算に成功した場合は算出された文字列、失敗した場合はundefinedを返します。
JavaScript
var result1 = timeMath.sum('12:34:56', '00:12:34'),
result2 = timeMath.sub('12:34:56', '00:12:34'),
result3 = timeMath.multiply('12:34:56', '00:00:02'),
result4 = timeMath.division('12:34:56', '00:00:02');
alert(result1); // 12:47:30
alert(result2); // 12:22:22
alert(result3); // 25:09:52
alert(result4); // 6:17:28