質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

2回答

2390閲覧

JavaScript : 先月の来月の月初、月末の取得方法について

nanase21

総合スコア144

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/12/22 04:06

編集2021/12/22 04:22

実現したいこと

先月、今月、来月の月初、月末の日時を取得する方法を知りたい。
以下のコードでそれっぽくは出来ているのですが、月初は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*/

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2021/12/22 23:43

回答へのコメント「月初と月末の期間を取得する方法」への疑問です。 現実には、1日0時0分0秒という日時が存在しますが、考慮済みですか? 比較元がミリ秒まで持っている場合、末日23時59分59秒*ミリ秒との比較で、月末から外れる可能性がありますが、秒単位の比較が保証されていますか? 上記のようなことがあるので、その月に含まれるかは、月初を1日0時0分0秒0ミリ秒として、以下のようにすることのほうが多いです。 その月の月初<=対象日時<翌月の月初未
guest

回答2

0

ベストアンサー

なぜ0:0:1と23:59:59が必要なのかわかりませんが

javascript

1const dt = new Date('2021-12-22T09:00:00.000Z'); 2const y=dt.getFullYear(); 3const m=dt.getMonth(); 4const pdtf = new Date(y,m-1,1,9,0,1).toJSON(); 5const tdtf = new Date(y,m ,1,9,0,1).toJSON(); 6const ndtf = new Date(y,m+1,1,9,0,1).toJSON(); 7const pdtl = new Date(y,m ,0,23+9,59,59).toJSON(); 8const tdtl = new Date(y,m+1,0,23+9,59,59).toJSON(); 9const ndtl = new Date(y,m+2,0,23+9,59,59).toJSON(); 10const t = {tdt:dt.toJSON(),pdtf,tdtf,ndtf,pdtl,tdtl,ndtl} 11console.log(t);

投稿2021/12/22 05:27

yambejp

総合スコア116724

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nanase21

2021/12/22 05:55

ありがとうございます。 質問の意図としては、月初と月末の期間を取得する方法を知りたく質問させていただきました。
guest

0

こういうことでしょうか?

js

1const dt = new Date('2021-12-22T09:00:00.000Z'); 2// 各月の1日を取得 3const pdtf = new Date(dt.getFullYear(), dt.getMonth() - 1, 1, 0, 0, 1);// 先月 4const tdtf = new Date(dt.getFullYear(), dt.getMonth() + 0, 1, 0, 0, 1); // 今月 5const ndtf = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 0, 0, 1);// 来月 6// 各月の末日を取得 7const pdtl = new Date(dt.getFullYear(), dt.getMonth() + 0, 1, 0, 0, -1);// 先月 8const tdtl = new Date(dt.getFullYear(), dt.getMonth() + 1, 1, 0, 0, -1);// 今月 9const ndtl = new Date(dt.getFullYear(), dt.getMonth() + 2, 1, 0, 0, -1);// 来月 10console.log(dt) 11const t = { 12 tdt: dt, 13 pdtf: pdtf, 14 tdtf: tdtf, 15 ndtf: ndtf, 16 pdtl: pdtl, 17 tdtl: tdtl, 18 ndtl: ndtl, 19}; 20console.log(t);

投稿2021/12/22 05:26

Lhankor_Mhy

総合スコア36960

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

Lhankor_Mhy

2021/12/22 05:28

ああ、GMTで欲しいのですね……
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問