【JS】Dateの扱い方やメソッドについて

2021/10/01に公開

Dateオブジェクトは、JavaScript内で定義されているビルトインオブジェクトです。

地味に使うことがあるので、今回はこのDateについて解説していこうと思います。

定義の仕方


数値を渡す

1つめは、引数にミリ秒を表す数値を渡すパターンです。

渡した数値をUTCの1970年1月1日0時0分0秒を基準とした時刻値として扱います。

この方法は、ブラウザなどの実行環境による挙動の違いが起きないので安全ではあります。


const date = new Date(1234567891234);
// 2009-02-13T23:31:31.234Z 
console.log(date.toISOString());

文字列を渡す

2つめは、文字列型の引数を渡すパターンです。

特定の形式に従った文字列を渡すと、 その文字列をパースして得られる時刻値を使います。

文字列からタイムゾーンが読み取れない場合は、実行環境のタイムゾーンによって時刻値を計算するため挙動の違いが起きる可能性があるので注意が必要です。


const inUTC = new Date("2009-02-13T23:31:31.234Z");
// 2009-02-13T23:31:31.234Z 
console.log(inUTC.toISOString());

数値を複数渡す

3つめは、年・月・日などの部分ごとの数値で引数を渡すパターンです。

先述した2つの方法と違い、この方法はタイムゾーンを指定できません。

そのため結果が実行環境で挙動の違いが出てしまうので、この方法は使うべきではありません。

時刻を部分ごとに指定したい場合は、Date.UTCメソッドを使えばOKです。

そうすることで、渡された数値をUTCにおける時刻として扱いその時刻値を返します。


const date1 = new Date(2009, 1, 13, 23, 31, 31, 999);
// 2009-02-13T14:31:31.999Z 
console.log(date1.toISOString());

const date1 = new Date(2009, 1, 13, 23, 31, 31, 999);
const date2 = new Date(ms);
// 2009-02-13T14:31:31.999Z 
console.log(date2.toISOString());

主なメソッド


Dateで使えるインスタンスメソッドは主に以下の通りです。

メソッド 説明
getFullYear() 日付の「年」を取得する(4桁)
getMonth() 日付の「月」を取得する(0 - 11)
getDate() 日付の「日」を取得する(1 - 31)
getDay() 日付の「曜日」を取得する(0 - 6)
getHours() 日付の「時」を取得する(0 - 23)
getMinutes() 日付の「分」を取得する(0 - 59)
getSeconds() 日付の「秒」を取得する(0 - 59)

そしてこれらを実際に使った例がこちらです。


const date = new Date();
//  Sun Sep 26 2021 07:45:25 GMT+0900 (日本標準時)
console.log(date);
const now = Date.now();
// 1632609925884
console.log(now);

// 2021
console.log(date.getFullYear());
// 8 月は1つ数字がずれることに注意
console.log(date.getMonth());
// 26
console.log(date.getDate());
// 日曜なので0
console.log(date.getDay());
// 7
console.log(date.getHours());
// 45
console.log(date.getMinutes());
// 25
console.log(date.getSeconds());

Dateをnewするときに引数を何も渡さなかった場合、現在の時刻を表すものが作成されます。

ちなみに、Dateのインスタンスではなく現在の時刻の時刻値を取得したいだけの場合は、Date.nowメソッドが使えます。

おわりに


今回紹介したDateオブジェクトですが、何かと不便だったり機能が不十分な場合があります。

なので、JavaScriptにおける日付・時刻の処理は、標準のDateではなくライブラリを使う場合が多いです。

代表的なライブラリとしては、moment.jsやjs-joda、date-fnsなどがあります。

一応今回説明したDateオブジェクトを使うことも結構あるので、覚えておいていただければと。

最後に宣伝です。

0からエンジニアになるためのノウハウをブログで発信しています。
https://hinoshin-blog.com/

また、YouTubeでの動画解説も始めました。
YouTubeのvideoIDが不正ですhttps://www.youtube.com/channel/UCqaBUPxazAcXaGSNbky1y4g

インスタの発信も細々とやっています。
https://www.instagram.com/hinoshin_enginner/

興味がある方は、ぜひリンクをクリックして確認してみてください!

おわり

Discussion