どんな方法があるかな、とちょっと考えてみました。
まず、素直に考えたらこんな感じでしょうか。
const
d = new Date(),
year = d.getFullYear(),
month = ('0' + (d.getMonth() + 1)). slice(-2),
day = ('0' + d.getDate()). slice(-2),
hour = ('0' + d.getHours()). slice(-2),
minute = ('0' + d.getMinutes()). slice(-2),
second = ('0' + d.getSeconds()). slice(-2),
millisecond = ('00' + d.getMilliseconds()).slice(-3);
console.log(new Date().toString());
console.log(
year + '年' + month + '月' + day + '日 ' +
hour + '時' + minute + '分' + second + '秒' + millisecond);
Sun Apr 11 2021 22:57:46 GMT+0900 (日本標準時)
2021年04月11日 22時57分46秒017
ゼロパディング済みの値が欲しい場合、get系メソッドで取得するならslice()
やpadStart()
を使っての処理が一般的ですね。
get系メソッド以外の方法だと、toISOString()
を使うとゼロパディング済みの値をいい感じに切り出せそうです。
const date = new Date();
date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
const
_ = date.toISOString().match(/\d+/g),
year = _[0],
month = _[1],
day = _[2],
hour = _[3],
minute = _[4],
second = _[5],
millisecond = _[6];
console.log(new Date().toString());
console.log(
year + '年' + month + '月' + day + '日 ' +
hour + '時' + minute + '分' + second + '秒' + millisecond);
Sun Apr 11 2021 22:58:53 GMT+0900 (日本標準時)
2021年04月11日 22時58分53秒871
toISOString()
はタイムゾーンがUTC固定なので、戻り値からそのまま数値を文字列として切り出しても時差によるずれが発生しないよう、getTimezoneOffset()
で実行環境のタイムゾーンに合わせて補正しています。
IEを無視しても大丈夫なら、もう少し短くなりますね。
const date = new Date();
date.setMinutes(date.getMinutes() - date.getTimezoneOffset());
const [year, month, day, hour, minute, second, millisecond] =
date.toISOString().match(/\d+/g);
console.log(new Date().toString());
console.log(`${year}年${month}月${day}日 ${hour}時${minute}分${second}秒${millisecond}`);
Sun Apr 11 2021 23:00:05 GMT+0900 (日本標準時)
2021年04月11日 23時00分05秒405
変数名なども短くしたいなら
const d = new Date();
d.setMinutes(d.getMinutes() - d.getTimezoneOffset());
const p = d.toJSON().match(/\d+/g);
console.log(new Date().toString());
console.log(`${p[0]}年${p[1]}月${p[2]}日 ${p[3]}時${p[4]}分${p[5]}秒${p[6]}`);
Sun Apr 11 2021 23:00:46 GMT+0900 (日本標準時)
2021年04月11日 23時00分46秒021
こんな感じでしょうか。
getTimezoneOffset()
のメソッド名の長さが気になりますが。
toJSON()
はDateオブジェクトではtoISOString()
のエイリアスと捉えて良さそうですね。
Date.prototype.toJSON()
toISOString() を使用して Date を表す文字列を返します。
JSON.stringify() の代わりに使用してください。