【JavaScript】Date型の加算・減算…年月日時分秒ごとの方法・コード例

JavaScript、Date型でこういう操作をしたい

  • 年月日の加算・減算
  • 時間分秒の加算・減算
  • ミリ秒の加算・減算

これには決まったやり方があるので、
年月日・時分秒ごとの方法を紹介します。

汎用的なコード例は次の通りです。

西暦年(year)にn年だけ加算/減算

最初は西暦年にn年だけ加算するやり方

これにはsetFullYear()を使います。

▼ このメソッドの重要なポイント

Date.prototype.setFullYear() : setFullYear() メソッドは、地方時に基づき、指定された日付の「年」を設定します。新しいタイムスタンプを返します。

引用元 : https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Date/setFullYear

「新しいタイムスタンプを返します」

ここが重要なポイントであり、後述する setMonth(), setDate(), 他時間セット系メソッドでも同様です。必ず新タイムスタンプを返すってコト

Date型を直接返すわけではありません。

 

それを踏まえてDateにn年加算する方法です。

▼ n年だけ西暦に加算・減算するコード例

こういうコード。現時点の西暦を Date.getFullYear() からゲットし、Date.setFullYear() が新タイムスタンプを返す特性を利用して新しいDateを返してます。

この流れは月日・時分秒でも同じです(一部例外あり)

月(month)にnカ月だけ加算/減算

Date型の月はmonthで表されます。

だからこのようなコードを書けばOKです。

▼ nカ月だけDateに加算・減算するコード例

もし年をまたぐなら、そのように調整されます。

厄介なのが月末で月をまたぐケースです。

もし 2023/01/31 に1カ月だけ加算する場合、なんと 2023/2/31 になります。そんな日付はないからDate型が気を利かせて 2023/03/01 に修正されます。

 

それだと不都合だから月またぎでは修正しました。

▼ このqiita記事を参考にした

月またぎには少し注意が必要です。

日数(date)にn日間を加算/減算

Date型では日数はdateから参照できます。

それにn日間だけ加算・減算するにはこうです。

▼ n日間だけDateに加算・減算するコード例

月またぎが発生しても自動で調整されます。

その点は月加算よりも楽です。

時間(hours)にn時間だけ加算/減算

Date型での時間は hours で表されます。

それをn時間だけ加算・減算するやり方です。

▼ n時間だけDateに加算・減算するコード例

日をまたぐ加算・減算でも調整してくれます。

ちなみに時間は 0 ~ 23 までの範囲です。

分(minutes)にn分だけ加算/減算

Date型では分はminutesで表現されます。

これにn分だけ加算・減算するような場合です。

▼ n分間だけDateに加算・減算するコード例

ちなみに分数は 0 ~ 23 までの範囲です。

あとは特筆すべきことは多分ない

秒(seconds)にn秒だけ加算/減算

Date型では秒数はsecondsで表されます。

それにn秒間だけ加算・減算する方法です。

▼ n秒間をDateに加算・減算するコード例

ちなみに秒数も 0 ~ 59 までの範囲です。

ミリ秒も同じ方法で加算・減算できます。

やることは同じなのでミリ秒は省略

ちなみにDatejsなどライブラリを使う手も

蛇足だけど、こういう日付を扱えるライブラリもあります。

▼ Github:datejs / Datejs

▼ Datejsでのの加算・減算のコード例

※ 残念ながらMITライセンスではない模様

頻繁にDateTimeを扱うなら導入という手もあります。

Date型に加算・減算は難しくはない

上記のライブラリを使うほどでもないです。

頻度が高くないなら、自前でコードを書く方がいいかも

あと日付関連ではこんな記事も書いてます。

以上、JavaScriptでDate型に加算・減算でした。