1ヶ月を想定しているのだと思います。経過日数ではなく、期間で捉えられているのでしょう。その前提で以前の投稿をしています。質問者さんが、明確に、1ヶ月の定義をして下されば、トラブル少ないんですけどね。末日が絡むというか、起算した結果が存在しない日の場合は末日に置き換えるという事でしょう。末尾に置き換えるということですね。私もそう思っていました。処理内容と同一と言う事だと思います。これは知りませんでした。考えてみればなるほどの仕様ですが、勉強になりました。ありがとうございます。以上を踏まえた上で、新たにコードを考えてみました。単体テストでは、上記に出た日付のテストは全てクリアしています。'開始日から1か月単位の先の日で、かつ、終了日以上となる日を満期日と定義する。'満期日があり得ない日付(2月30日とか)になる場合は、満期日の月末を満期日とする。'満期日があり得ない日付(2月30日とか)になる場合は、満期日の月末を満期日とする。'満期日よりも終了日が大きい場合は、少なくとも満期日は終了日より1か月先にある。7:33返信|引用モデレータ0サインインして投票>自分が行う条件で反問題がなかったのですが、問題点などがありましたら、ご指摘いただけると幸いです。何かありましたらにお答えします。以下に書く事は、自分への戒めも込めて書く一般的な注意事項です。算出したデータに対して、補正を行うものですよね。ご質問に至ったのは、この例外処理に行き詰ったからだと思います。後日、想定していなかった値を放り込まれて、とんでもない値を吐く事もありますね。デバッグして、期待値を求められない場合、この様に、例外処理を書き加える事は良くあります。落ち漏れや、後日の変更時に分かり難いコードになってしまう事が、多々あります。文のオンパレードは頭が混乱しやすいです。漏れが出易いものです。可能であれば、考え方の方向転換や処理方法の変更をも考慮して下さい。可能な限り、条件文で分岐させるのは最小限にする方が、後々のメンテも楽になりますから。以上、読み飛ばして下さい。「経過月数」の「定義」を「文章」で書きましょう。それが無いとだれも回答できないと考えられます。言うものの、文面から察するに。仮定1.求める時刻範囲である「経過月数」には、開始と終了の位置が含まれる。その仮定を採用すると、1.日とはその0:00~23:59:59の範囲を意味する(定義)。2.従って、終了日を含める場合は、その日の時刻に関わらず終了日の23:59:59を超えていると判定しなければならない。「開始日」から「終了日の翌日」までの月数である。間違ってたらすみません。年をまたぐ場合や、閏年の場合などにどうなるかわかりません。LICENSE」が適用されます。仲澤@失業者さんが書かれているように、経過月数の定義がはっきりわからないのですが、開始日と終了日の間に丸ごと含まれる月がいくつあるかということであれば、例えば以下のように判断できると思います。Function'月末日かどうかを求める。Function#(追記)あ~、すみません。掲載されたコードを見ると、こういう意味じゃなさそうですね。日も加味する必要がありそうですね。今、時間が無いので投げっぱなしですみません。0:38返信|引用モデレータ0サインインして投票ご回答有難うございます。肝心なことを書かず、大変申し訳ありません。日も加味してNヶ月経過したかどうかの判定をしたいと考えています。月初から月末までの場合も「1月」とカウントしたいと考えています。0ヶ月となるようにしたいと考えています。DateDiffの場合、月が異なる場合にはその「1月」と計算をしてくれるようですが、1/30~2/28のような場合の計算がうまくいかず、悩んでおります。日の大小を加味した上で経過月をまず求めますが、終了日が月末の場合に特異な場合が発生します。それは、1.終了日が月末日で、かつ開始日が1日の場合2.終了日が月末日で、かつ、開始日の日より終了日の日が小さい場合の2つだと思います。これらの場合には経過月を1つ増やさなければなりません。以上、コードにすると以下になります。Function'月末日かどうかを求める。皆様のご指摘の様に、1ヶ月の定義が不明瞭なので、書かれた内容から推測で書いて行きます。例として示された内容(7件)は一応クリヤしています。前日と翌日を求めます。翌月同日を算出し、終了時点と比べます。これを月単位でループして、ループの回数から月数を求めました。他の方と違い、泥臭い方法ですが、如何でしょうか。経過月数を求めるところ、年を12倍、かな。皆様、ご回答有難うございます。trapemiya様のご提案をテストしてみた結果です。おおむね問題がなかったのですが、こちらのテストでは、3/27~4/26の場合は、「1」を返してほしいのですが、「0」を返してしまいます。1/30~2/28も「1」を返してほしいところですが、「0」を返してしまいます。ご提示いただいたコードをもとに、自分でも考えているところです。2:16返信|引用0サインインして投票>3/27~4/26>の場合は、「1」を返してほしいのですが、「0」を返してしまいます。私の認識では「0」になると理解していたのですが、この場合、なぜ「1」になるのでしょうか?>1/30~2/28>も「1」を返してほしいところですが、「0」を返してしまいます。すれば、私のコードでは「1」を返すことを確かめましたが、年が違うのでしょうか?例えば、うるう年であれば、2/28は月末ではなくなりますので、「0」を返すはずです。