1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

JavaScript ライブラリ無しでできるだけ簡単にゼロパディング済みの年月日時分秒ミリ秒を個別に取得したい

Last updated at Posted at 2021-04-11

どんな方法があるかな、とちょっと考えてみました。
まず、素直に考えたらこんな感じでしょうか。

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() の代わりに使用してください。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?