実現したいこと
先月、今月、来月の月初、月末の日時を取得する方法を知りたい。
以下のコードでそれっぽくは出来ているのですが、月初は0時0分1秒,月末は23時59分59秒で「年月月日時分秒」を取得する方法が分からないです。
typescript
1const dt = new Date('2021-12-22T09:00:00.000Z'); 2 // 各月の1日を取得 3 const pdtf = new Date(dt.getFullYear(), dt.getMonth() - 1, 1, 0, 0, 1); // 先月 4 const tdtf = new Date(dt.getFullYear(), dt.getMonth(), 1, 0, 0, 1); // 今月 5 const ndtf = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 0, 0, 1); // 来月 6 // 各月の末日を取得 7 const pdtl = new Date(dt.getFullYear(), dt.getMonth(), 0, 0, 23, 59, 59); // 先月 8 const tdtl = new Date(dt.getFullYear(), dt.getMonth() + 1, 0, 23, 59, 59); // 今月 9 const ndtl = new Date(dt.getFullYear(), dt.getMonth() + 2, 0, 23, 59, 59); // 来月 10 console.log(dt) 11 const t = { 12 tdt: dt, 13 pdtf: pdtf, 14 tdtf: tdtf, 15 ndtf: ndtf, 16 pdtl: pdtl, 17 tdtl: tdtl, 18 ndtl: ndtl, 19 }; 20 console.log(t); 21 22/* 23"2021-12-22T09:00:00.000Z" 24{ 25 "tdt": "2021-12-22T09:00:00.000Z", 26 "pdtf": "2021-10-31T15:00:01.000Z", 27 "tdtf": "2021-11-30T15:00:01.000Z", 28 "ndtf": "2021-12-31T15:00:01.000Z", 29 "pdtl": "2021-11-30T14:59:59.000Z", 30 "tdtl": "2021-12-31T14:59:59.000Z", 31 "ndtl": "2022-01-31T14:59:59.000Z" 32} 33*/ 34 35// 理想のイメージ 36/* 37"2021-12-22T09:00:00.000Z" 38{ 39 "tdt": "2021-12-22T09:00:00.000Z", # 入力日時 40 "pdtf": "2021-11-01T00:00:01.000Z", # 先月1日 41 "tdtf": "2021-12-01T00:00:01.000Z", # 今月1日 42 "ndtf": "2021-01-01T00:00:01.000Z", # 来月1日 43 "pdtl": "2021-11-30T23:59:59.000Z", # 先月最終日 44 "tdtl": "2021-12-31T23:59:59.000Z", # 今月最終日 45 "ndtl": "2022-01-31T23:59:59.000Z", # 来月最終日 46} 47*/
回答へのコメント「月初と月末の期間を取得する方法」への疑問です。
現実には、1日0時0分0秒という日時が存在しますが、考慮済みですか?
比較元がミリ秒まで持っている場合、末日23時59分59秒*ミリ秒との比較で、月末から外れる可能性がありますが、秒単位の比較が保証されていますか?
上記のようなことがあるので、その月に含まれるかは、月初を1日0時0分0秒0ミリ秒として、以下のようにすることのほうが多いです。
その月の月初<=対象日時<翌月の月初未
回答2件
あなたの回答
tips
プレビュー