[解決済み] JavaScriptで2つの日付の月数の違い
2022-04-15 10:28:40
質問
JavaScriptで2つのDate()オブジェクトの差を計算し、差の月数だけを返すにはどうしたらよいでしょうか?
何かお手伝いいただけると助かります :)
解決方法は?
差分月数の定義は、いろいろと解釈が分かれるところです :-)
JavaScriptのdateオブジェクトから年、月、日を取得することができます。どのような情報を求めているかにもよりますが、それらを使って2つの時点の間に何ヶ月あるのかを把握することができます。
例えば、オフザケ。
function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth();
months += d2.getMonth();
return months <= 0 ? 0 : months;
}
function monthDiff(d1, d2) {
var months;
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth();
months += d2.getMonth();
return months <= 0 ? 0 : months;
}
function test(d1, d2) {
var diff = monthDiff(d1, d2);
console.log(
d1.toISOString().substring(0, 10),
"to",
d2.toISOString().substring(0, 10),
":",
diff
);
}
test(
new Date(2008, 10, 4), // November 4th, 2008
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 16
test(
new Date(2010, 0, 1), // January 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 2
test(
new Date(2010, 1, 1), // February 1st, 2010
new Date(2010, 2, 12) // March 12th, 2010
);
// Result: 1
(JavaScriptの月の値は0=1月から始まることに注意してください)。
なぜなら、一般的な2月の3日間は、8月の3日間(~9.677%)よりもその月の割合が大きい(~10.714%)からです。もちろん、2月でさえ、うるう年かどうかによって変動します。
また、いくつかの 日付と時刻のライブラリ JavaScriptでは、おそらくこのようなことが簡単にできるようになります。
備考
: 以前は
+ 1
を上記の、ここに。
months = (d2.getFullYear() - d1.getFullYear()) * 12;
months -= d1.getMonth() + 1;
// −−−−−−−−−−−−−−−−−−−−^^^^
months += d2.getMonth();
それは、もともと私が言っていたことだからです。
...これは 満月 2つの日付の間にある月(例えば、それぞれの日付が属する月を除く)は、部分月としてカウントされません。
2つの理由で削除しました。
-
部分月数のカウントをしないことは、回答に来ている多くの(ほとんどの?)人が望んでいないことがわかったので、分けて考えるべきだと思いました。
-
その定義でもうまくいかないことがありました :-D (すみません。)
関連
-
[解決済み】Node.jsで "Cannot find module "エラーを解決するには?
-
[解決済み】エラー。Ionic使用中にモジュール '../lib/utils/unsupported.js' が見つかりませんでした。
-
[解決済み】JavaScriptで「無効な日付」のDateインスタンスを検出する
-
[解決済み] JavaScriptで "use strict "は何をするのか、その根拠は?
-
[解決済み] この2回(1927年)を引き算すると、なぜおかしな結果になるのでしょうか?
-
[解決済み] let "と "var "の使い分けは?
-
[解決済み] JavaScriptで2つの日付を比較する
-
[解決済み] JavaScriptで特定の範囲のランダムな整数を生成する?
-
[解決済み] 2つの日付の差(日数)を計算する?
-
[解決済み】オブジェクトの配列を文字列のプロパティ値でソートする
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
vue3.0プロジェクトのアーキテクチャを構築するための便利なツール
-
JavaScriptのクロージャの説明
-
vue+webrtc(Tencent cloud)ライブ機能の実践を実現するために
-
[解決済み] Error : 未定義のプロパティ 'map' を読み取ることができません。
-
[解決済み】SyntaxError: JSONの位置1に予期しないトークンoがある。
-
[解決済み] 配列の結合時に未定義のプロパティ 'push' を読み込むことができない
-
[解決済み】React Nativeアプリをターミナルから実行するとエラーが発生する(iOS)
-
[解決済み] TypeError: $.ajax(...) is not a function?
-
nodejs unhandledPromiseRejectionWarning メッセージ
-
JavaScriptのgetElementById、getElementsByTagNam、getElementsByClassNameの違いと使い方