JavaScript 秒を時・分・秒や hh:mm:ss に変換
作成日:2023年5月8日
与えられた秒数を時間・分・秒や日・時間・分・秒、hh:mm:ss などに変換する方法です。
例えば100000秒を「27時間46分40秒」や「1日3時間46分40秒」、「27:46:40」に変換します。
変換するには以下の値を使用します。
| 単位 | 秒 | 式(算出) |
|---|---|---|
| 1分(min) | 60 | 1 * 60 |
| 1時間(hour) | 3600 | 60 * 60 |
| 1日(day) | 86400 | 60 * 60 * 24 |
100000秒を日・時間・分・秒に変換するには、以下のように計算することができます。
// 秒数を一日(86400)で割って切り捨て
const day = Math.floor(100000 / 86400);
console.log(`${day}日`); // 1日
// 秒数を一日(86400)で割った余りを時間(3600)で割って切り捨て
const hour = Math.floor(100000 % 86400 / 3600);
console.log(`${hour}時間`); // 3時間
// 秒数を時間(3600)で割った余りを分(60)で割って切り捨て
const min = Math.floor(100000 % 3600 / 60);
console.log(`${min}分`); // 46分
// 秒数を分(60)で割った余り
const sec = 100000 % 60;
console.log(`${sec}秒`); // 40秒
`${day}日`はバッククォート(`)で文字列を囲むテンプレートリテラルです。`${変数名}` のように記述すると ${ } の中の変数が展開されます。
const day = Math.floor(100000 / 86400);
console.log(`${day}日`); // 1日
//以下と同じこと
console.log(day + '日'); // 1日
日時分秒に変換
以下は引数に与えられた秒数を日時分秒に変換する関数の例です。
function secToDayTime(seconds) {
const day = Math.floor(seconds / 86400);
const hour = Math.floor(seconds % 86400 / 3600);
const min = Math.floor(seconds % 3600 / 60);
const sec = seconds % 60;
let time = '';
// day が 0 の場合は「日」は出力しない(hour や min も同様)
if(day !== 0) {
time = `${day}日${hour}時間${min}分${sec}秒`;
}else if(hour !==0 ) {
time = `${hour}時間${min}分${sec}秒`;
}else if(min !==0) {
time = `${min}分${sec}秒`;
}else {
time = `${sec}秒`;
}
return time;
}
console.log(secToDayTime(100000)); // 1日3時間46分40秒
console.log(secToDayTime(10000)); // 2時間46分40秒
console.log(secToDayTime(1000)); // 16分40秒
console.log(secToDayTime(100)); // 1分40秒
console.log(secToDayTime(10)); // 10秒
console.log(secToDayTime(0)); // 0秒
時分秒に変換
以下は引数に与えられた秒数を時分秒に変換する関数の例です。
function secToTime(seconds) {
const hour = Math.floor(seconds / 3600);
const min = Math.floor(seconds % 3600 / 60);
const sec = seconds % 60;
let time = '';
if(hour !==0 ) {
time = `${hour}時間${min}分${sec}秒`;
}else if(min !==0) {
time = `${min}分${sec}秒`;
}else {
time = `${sec}秒`;
}
return time;
}
console.log(secToTime(100000)); // 27時間46分40秒
console.log(secToTime(10000)); // 2時間46分40秒
console.log(secToTime(1000)); // 16分40秒
console.log(secToTime(100)); // 1分40秒
console.log(secToTime(10)); // 10秒
console.log(secToTime(0)); // 0秒
桁あわせ(ゼロパディング)
桁数を合わせるために、時分秒の各値が1桁の場合は先頭に 0 を付けて2桁で表示する例です。
文字列のメソッド slice() の引数に -2 を指定して、文字列の最後から2文字を取り出します。
例えば、'001'.slice(-2) とすると 最後の2文字 01 を取得できます。
console.log('001'.slice(-2)); // 01
console.log('0012'.slice(-2)); // 12
console.log('00'.slice(-2)); // 00
以下は時分秒に変換する関数を、1桁の場合は先頭に 0 を付けて表示するように書き換えたものです。
hour は3桁以上になる場合は、slice(-2) を適用すると2桁しか取得できないので3桁以上かどうかで分岐しています。
function secToTimeZeroPadding(seconds) {
const hour = Math.floor(seconds / 3600);
const min = Math.floor(seconds % 3600 / 60);
const sec = seconds % 60;
let hh;
if (hour < 100) {
hh = (`00${hour}`).slice(-2);
} else {
// hour が3桁以上の場合は左0埋めをしない
hh = hour;
}
const mm = (`00${min}`).slice(-2);
const ss = (`00${sec}`).slice(-2);
let time = '';
if (hour !== 0) {
time = `${hh}時間${mm}分${ss}秒`;
} else if (min !== 0) {
time = `${mm}分${ss}秒`;
} else {
time = `${ss}秒`;
}
return time;
}
console.log(secToTimeZeroPadding(1000000)); // 277時間46分40秒
console.log(secToTimeZeroPadding(100000)); // 27時間46分40秒
console.log(secToTimeZeroPadding(10020)); // 02時間46分00秒
console.log(secToTimeZeroPadding(1000)); // 16分40秒
console.log(secToTimeZeroPadding(100)); // 01分40秒
console.log(secToTimeZeroPadding(5)); // 05秒
console.log(secToTimeZeroPadding(0)); // 00秒
hh:mm:ss に変換
以下は引数に与えられた秒数を hh:mm:ss 形式に変換する関数の例です。
時分秒の各値が1桁の場合は、左に0を付けて2桁で表示します。
function secToHMS(seconds) {
const hour = Math.floor(seconds / 3600);
const min = Math.floor(seconds % 3600 / 60);
const sec = seconds % 60;
let hh;
// hour が3桁以上の場合は左0埋めをしない
if(hour < 100) {
hh = (`00${hour}`).slice(-2);
}else{
hh = hour;
}
const mm = (`00${min}`).slice(-2);
const ss = (`00${sec}`).slice(-2);
let time = '';
if(hour !== 0 ) {
time = `${hh}:${mm}:${ss}`;
}else{
time = `${mm}:${ss}`;
}
return time;
}
console.log(secToHMS(100000)); // 27:46:40
console.log(secToHMS(10000)); // 02:46:40
console.log(secToHMS(1000)); // 16:40
console.log(secToHMS(100)); // 01:40
console.log(secToHMS(10)); // 00:10
console.log(secToHMS(0)); // 00:00
ビット否定演算子2つで小数の切り捨て
ビット否定演算子 ~(Bitwise NOT Operator)を2つ ~~ 使用すると、以下のように小数の切り捨てを行うことができます。
console.log(~~ 1.23); // 1 console.log(~~ -9.87); // -9
前述の hh:mm:ss 形式に変換する関数の Math.floo() の部分は ~~ を使って以下のように記述することもできます(但し、他人が見て分かりにくいと思いますが)。
function secToHMS(seconds) {
// Math.floo() の代わりに ~~ で切り捨て
const hour = ~~(seconds / 3600);
const min = ~~(seconds % 3600 / 60);
const sec = seconds % 60;
let hh;
if(hour < 100) {
hh = (`00${hour}`).slice(-2);
}else{
hh = hour;
}
const mm = (`00${min}`).slice(-2);
const ss = (`00${sec}`).slice(-2);
let time = '';
if(hour !== 0 ) {
time = `${hh}:${mm}:${ss}`;
}else{
time = `${mm}:${ss}`;
}
return time;
}