掲示板

サンデープログラマーの悩み

世の中には真剣に悩まなくても全く困らないこともたくさんありますが、ちゃんとした教育を受けずにプログラミングの楽しみを知ってしまった故につまらないことに悩むことがままあります

今日は皆さんならどうやって解決するのかに興味があったのでお題を出しますので解決方法を考えてみてみてください

たぶん正解はいくつもあると思いますのでいくつ回答しても良いです

ただし回答には計算方法や前提条件、回答実例も記載してください
日付時間は日本標準時を使います


お題「今日の3か月後は何日?」

プログラミングのお話ですので今日が〇月〇日なら何日?は△月△日と一発で決まる回答を期待します


面白い回答にはチップを差し上げます
なるほど!と感心した回答を見かけたら皆さんもチップをはずんで下さいね


136 件のコメント
87 - 136 / 136
さとさん
自称手前処理と後処理は
3月31日の1ヵ月後を4月の末日(4月30日)とするのか5月の1日とするのかという話です。
これは処理の前提の都合によりドチラでも変でないと思います。
勝手な用語ですいません。

Dさん
そうですね、「後」という言葉がありますので、厳密に民法等で考える期間とは違うという考えです。今回のお題に都合の良い設定を考えたに違いありません。
民法は期間について規定しておりますのでその範囲を逸脱せず、一般的な考えと同じ答えを出すのに都合の良さそうな設定を考え、いくつかの条件で民法と齟齬が少ない考えを作ってみました。
民法の期間としての解釈は一応踏襲しているつもりですが、結果は自分の思う期日が出せる設定です。だから仰る通り起算点と期間満了は考慮しますが別の日として考えてます。
ただ、それを指す条件によりかならす私の考えた期日が都合が良いかはまた違うのではないかとの考えもあったり・・・

そんな感じです。
(今は少し酔っているので、可笑しな点があっても軽く流してね)
この話は「まで」という用語の使い方に似ていると思うのです。
までは期間を示しているのですが。
たとえば、10時まで通れないと言えば10時になったら通れる事を指します。
でも10日までに資料を提出という場合
10日の朝一番(又は始業直前)で提出してOKな気がするのです。
会社という条件で考えると10日が始まるのは始業が基準ですから。
期間の考えで言うなら9日には提出している必要があるのですが。
この場合資料の必要な条件が10日の朝一番で会議で使うと言う理由なら
9日の間にその資料が正しいか提出された人が見直す時間が必要になります。だから9日の終了直前だとしても、発言した人の意図には添えてないのです。だから9日の少なくとも終業前には提出する必要がある。という事になります。
日本語には行間の意ではありませんが書かれていないが意味がある場合もあり状況により言葉が指す物(事)が変わる事があると思います。
だから

このスレ主の問いは答えが2種類ある。で間違い無いと思います。
(酔っての発言なので、細部は多目に見てね)
おはようございます。
さて仕様書として事例をふまえ条件を整理する作業を考えました。

1、内の期間を条件とする場合。
例1、一ヶ月後までの予約一覧が確認できるプログラム。
例2、有効期限的な日付の管理としてのプログラム 
このようなシステムを組む場合は存在しない日が指定日となる場合はその月の末日がプログラムの指定日になる必要がある。

2、期限が過ぎる事を条件とする場合。
例1、次の予約可能日を1ヵ月後に指定してその日付が確認できるプログラム
例2、期間の経過するまで変更を禁止する場合の変更可能になる日付
期間が過ぎる事が成就の条件でその日付を指定する場合はこちらになるだろう

上記のような条件で○ヵ月後の判定を変更する必要がある。
具体的なプログラムでは
1、の場合
基準日を含まず○ヶ月を足し結果の日付が存在しなければその月末を指定する。
2、の場合
基準日を含み○ヶ月を足し結果の日付が存在しない場合は翌月の1日を指定する。


こんな感じでどうでしょう?
訂正
2、の場合
基準日を含まず○ヶ月を足し結果の日付が存在しない場合は翌月の1日を指定する。
かくいち さん

手前処理と後処理の言葉の意味わかりました。

>基準日を含まず○ヶ月を足し

の意味ですが、期間に基準日を含めてしまうという意味ですよね?
「含まず」とは期間終了の日が、○ヶ月後の基準日の「1日前」の日になるという事ですね。
期限が短くなる計算方法という意味ですね?


>基準日を含み○ヶ月を足し

の意味は、期間に基準日を含めないという意味ですよね?
「含み」とは期間終了の日が、○ヶ月後の基準日と「同日」になるという事ですね。
期限が長くなる計算方法という意味ですね?


1、の期間が短い方は、
 現在の有効期間を知る為の日付計算、ですね。
 今日の午前0時起算で、○ヵ月が終わる最終の日ですね。納得です。

2、の期間が長い方は、
 今の期間が終わった後の、次の期間の開始日を知りたい場合、という事ですね。
こちらは疑問なのですが、上の1番の短い方の日付の「翌日」、ではだめなんでしょうか。
起算日が1日後ろにズレるので、結果的に1番の翌日と同じ日になるんでしょうか。
存在しない日を翌月に繰り上げる事で、本来の禁止満了日の2日後になってしまう場合もありませんかね?ちゃんと検証できていませんが…
ごめんなさい、訂正の方に今気付きました。

>2、の場合
>基準日を含まず○ヶ月を足し結果の日付が存在しない場合は翌月の1日を指定する。

1番の日付と同じになりますよね。
月末日が存在しない時だけ1番の翌日になりますが…

2番って期間満了の翌日を算出する必要があるのではないでしょうか…
だから1番の翌日でないとダメな気がするのですが。
間違えていたらごめんなさい。
さとさん
基本的に1と2は同じ日付です。
1と2は概念が違うという考えなので計算上は
1、「期間を計算して」そこまでを答える場合と
2、「期間を計算して」その後を答えるという話になります。

2番は期間満了の翌日を算出しないと駄目の通りですが

>1番の日付と同じになりますよね。
月末日が存在しない時だけ1番の翌日になりますが…

その通りだと思っています。

基本的に、○ヶ月後という日時を聞かれたときは(日付が存在しない場合を除き)答えが同じと考えています。だからそれに都合の良い解釈を民法の中の条件から引き出した物が前半の条件整理となります。

しかしながら同じ期間の後を示すはずの言葉でも、日付が存在しない場合結果が違わなければおかしいと感じてます。

今ちょっと検索しまして、
2の計算の感覚は刑法の22条が感覚として近いと感じてます。

http://elaws.e-gov.go.jp/search/elawsSearch/elaws_search/lsg0500/detail?lawId=140AC0000000045
第三章 期間計算
(期間の計算)
第二十二条 月又は年によって期間を定めたときは、暦に従って計算する。
(刑期の計算)
第二十三条 刑期は、裁判が確定した日から起算する。
2 (略)
(受刑等の初日及び釈放)
第二十四条 受刑の初日は、時間にかかわらず、一日として計算する。時効期間の初日についても、同様とする。
2 刑期が終了した場合における釈放は、その終了の日の翌日に行う。

この場合、言葉として「釈放は○ヶ月後」という使い方が2と条件が同じと考えています。

もちろん2の条件を基にした期日の計算についても1の翌日となる条件というのもあるでしょうが、私が例に出した物は私の条件に当てはまる物という感覚です。また、私が考えた中では1、の翌日になるという条件がしっくりする条件が思いつきませんでした。

もちろん今回の回答が分かれたように一般的にどのように考えるかもいくつもあるでしょうが・・・

よろしければ、さとさんが1番の翌日がしっくり感じる例を教えて下さい。
(もちろん2の例はすべて1の翌日が正しいと感じるでもOKですが)
コメントが長すぎたので分けて投稿

追記。1と2の「具体的なプログラムでは」のまえに概念的な計算方法を入れるつもりで抜けていました。(それで誤字してます)

1、の場合は
基準日を含まず期間を足した日付
2、の場合は
基準日を含んで期日を足した日付の翌日


具体的なプログラムでは計算が楽になるように条件に合う日付になる単純そうな表記にしています。

(今日も多少アルコールが入っていますが昨日より良いかな?)
かくいちさん

前の話題「21月29日の3ヵ月後はいつか?」に戻ります。

かくいちさんの計算では3月1日になるという事でしたよね。
一旦は理解できた!と言いましたが、おかしい現象が発生する事に気付きました!!
https://king.mineo.jp/my/absente/reports/43401/comments/1304363

かくいちさんの計算では、
Xヵ月後の同日の日までを期間とする。その日が無い場合はその月の月末までを期間とし、その翌日をXヵ月後の日とする。
11月の3ヵ月後の2月29日は無いので、2月28日までを3ヵ月の期間とし、その翌日の3月1日を3ヵ月後の日としました。

この方式だとおかしな現象が発生します、

(例)1月31日から2ヵ月の日数を計算します。

①2か月分ひとっ飛びに計算すると59日です
1月31日の2か月後
 ↓(59日間)
3月31日

②1ヵ月ずつ加算して行くと60日になってしまう!
1月31日の1か月後
 ↓(29日間)
3月1日    …かくいちさん方式では2月末ではなく3月1日になる!
3月1日の1ヵ月後
 ↓(31日間)
4月1日
  (合計60日)
--------------

では、かくいちさん方式のどこでそうなるのか?
ここです→「その日が無い場合はその月の月末までを期間とし」
これは、「その日が無い場合はその月の月末の『前日』までを期間とし」が正しいです。
何故なら、月末起算のXヵ月後は、その月の月末の『前日』までが期間で、1ヵ月後の日は月末日だからです。
例えば7月31日の1ヵ月後は、8月30日までが期間で、1ヵ月後の日は8月31日となります。
そうでないと、2,4,6,9,11月の月末のたびに1日ずつズレて行ってしまいます。
月末の日数が少ない場合だけ、期間が延びるのは変じゃないでしょうか?
👆この定義だと、1ヶ月後を「1ヶ月の期間の後」としながらも、月末の指定席を維持し続けられるので、かなりイケテル発想ですね。

ただ、2月28日の1ヶ月後って、3月28日?、それとも3月31日?
Dさん

>2月28日の1ヶ月後って、3月28日?、それとも3月31日?

民法では3月31日が期間満了日。
JRの定期券は3月27日まで期限です。
それは一応分かってるんですが、さとさん方式だとどうなるんですかね?
やはり考え直したのですが、
やはり1ヶ月ずつ分けて計算する場合と、まとめて計算する場合とで、結果が異なるのは、ありえる話なのかも。

民法でも、過去に遡る場合に、
1ヶ月前の1ヶ月前、と計算する場合と
ひとっ飛びに2ヶ月前、と計算する場合で結果が異なります。

という訳で、月末の日が足りない場合に限り、1日期間が伸びる、という考え方も、それはそれで有りなのかも。
JRの定期券はそうなっています。

(11月30日の3ヶ月後は3月2日、1月31日の1ヶ月後は3月3日、と計算されるブログラム言語の関数もあります。感覚的に合致するかどうかは疑問ではありますが 笑)
Dさん

>2月28日の1ヶ月後って、3月28日?、それとも3月31日?

>それは一応分かってるんですが、さとさん方式だとどうなるんですかね?

私方式では、◯ヶ月後の同日、と考えるので
3月28日です。
Dさん
そうですそうです。

だから考え直しました。↓(再掲載)

>やはり考え直したのですが、
>やはり1ヶ月ずつ分けて計算する場合と、まとめて計算する場合とで、結果が異なるのは、ありえる話なのかも。
そうなると、1月31日の2ヶ月後と異なってきませんか?
ああ、そういう流れでしたか。
了解です。
Dさん

期間の計算を繰り返す件に関してはそうですが、私の個人的な感覚としては、最初に書いた方式が一番しっくり来るんですけどね。

開始日の0時より起算、◯ヶ月後同日の「前日」が期限、期限の翌日が◯ヶ月後の日、の場合。

こっちの計算方法↓が好み
「◯ヶ月後の同日が無い場合は、その月の月末の『前日』までを期間とし、期間終了の翌日◯ヶ月後の日とする」

私もこっちの方が「イケてる」と思います。
うるう年を除く事を前提として以後の話を行います。

さて、さとさんの
>何故なら、月末起算のXヵ月後は、その月の月末の『前日』までが期間で、1ヵ月後の日は月末日だからです。

という理論(条件)は末日という固定されていない日を基準に考えている場合
末日は日付に置き換えられるが
日付は月末に置き換えてはいけない場合があります。

例)
1月30日の2ヵ月後は?

2ヵ月後を1度に計算すると
3月30日です。

1ヶ月づつ計算すると
どの条件で計算しても1月30日という日には戻れません。

単体の計算でも良いです。

2月28日の1ヵ月後は?
3月28日ですか?
3月31日ですか?

これは前提条件により結果が異なると考えています。
なので、すべての条件でさとさんの理論を採用することは出来ない。
と考えます。
1ヶ月後という定義が必要な場面を想像すると、毎月末に行う会議の次回は?、とか、月末支払いの料金の次回の支払日は?、とか、毎月末にスタートする1ヶ月後工程の次のスタートは?、といったところですので、月末の1ヶ月後が月末になる定義(それでいて期間の後になる)はなかなかイケテルと思います。
ただ、先ほども書きましたが、2月28日の1ヶ月後が3月28日になってしまうのが惜しいところですね。

そういう意味では民法の定義は良く出来てます。
連投失礼します。

①月末にする場合
1/31の1ヶ月後:2/28
2ヶ月後:3/31
3ヶ月後:4/30

②翌月1日にする場合
1/31の1ヶ月後:3/1
2ヶ月後:3/31
3ヶ月後:5/1

となるので、やはりさとさん方式のほうが使いやすそうですね。
纏めると

○ヶ月後を指定した日付の計算には

1、基準日を含まず期間を足した日付

2、基準日を含んで期日を足した日付の翌日

3、末日を指定した期間の計算の場合

この3パターンある、と考えるが自然ですかね?
かくいち さん

私も書いた後に気付いてその後のコメントで訂正したのですが、
1ヵ月ごとに計算するのと、まとめて何か月も計算するのとで結果が違う、
というのは普通にある事でおかしい事では無いですね。
失礼しました。

ただ、下記の点において、個人的に違和感があったので、私の訂正案の方が好みだと思いました。(個人的印象です)

①0時起算の期間は、○ヵ月後の同日迄ではなく、同日の「前日」迄であるのに、2月等短い月だけ、末日の「前日」でないのは何か変?

②0時起算の○ヵ月後の日は、○ヵ月後の同日であるのに、2月等短い月だけ、同日ではなく翌日になっているのは何か変?


勿論、用途によって様々だというのは理解しており、例えば定期券の期間を計算する場合は、1月29日からの定期券が、もしも27日まで(閏年以外)となったら客から苦情が来るでしょう。
Dさん

先ほどのコメントを間違えていました。訂正です。
https://king.mineo.jp/my/absente/reports/43401/comments/1306956

>2月28日の1ヶ月後って、3月28日?、それとも3月31日?

>民法では3月31日が期間満了日
>JRの定期券は3月27日まで期限です。

下のように訂正。
民法では
 原則、3月31日が期間満了日
 但し、午前0時から期間が開始する場合、3月27日が期間満了日
でした。

---以下引用---
民法第140条  日、週、月又は年によって期間を定めたときは、期間の初日は、算入しない。ただし、その期間が午前零時から始まるときは、この限りでない。

民法第143条  2  週、月又は年の初めから期間を起算しないときは、その期間は、最後の週、月又は年においてその起算日に応当する日の前日に満了する。
かくいちさん

>○ヶ月後を指定した日付の計算には

>1、基準日を含まず期間を足した日付

>2、基準日を含んで期日を足した日付の翌日

>3、末日を指定した期間の計算の場合


これに質問です。
①「基準日を含まず」とは期間に含めず翌日から起算するという意味ですか?

②「基準日を含んで」とは期間に含めて基準日から起算するという意味ですか?

➂「○ヵ月後」の定義とは、期間が終了した瞬間の日ですか?
 期間が終了した日付の翌日ですか?
 私の感覚では、基準日を含まない方は期間終了日と○ヵ月後は同日で、基準日を含む方は、期間が終了した日の翌日が○ヵ月後、という印象です。
 0時開始かどうかの違いですね。

④「期日を足した日付」の期日とは?
例えば、2月1日から1ヵ月、という場合は、
(2+1)月 1(同)日
という意味ですよね?

⑤もし上記の通りであれば、
「1、基準日含んだ」と「2、基準日含まない」の期間最終日は1日ズレますが、○ヵ月後の日は、1も2も同じ日になるはずだと考えますが、どうでしょうか。(24時で終了するか日中に終了するかの違い)

⑥「末日を指定した期間」とは、例えばどんな場合ですか?
書き込みに時間が掛かりすでに回答した、という事をもう一度聞いてしまう場合があります。ご了承下さい。

質問への答えです。
1>ず翌日から起算するという意味ですか?
A,YES、この計算は民法の基本の期間の計算の通りとなります。
なので主に期間についての計算で用いるべき使い方と思います。

2>期間に含めて基準日から起算するという意味ですか?
A,YES、この計算は民法の0時からの例外の計算です。
但しこの計算を用いるべき使い方は刑法の釈放の日を求める場合と同じ
期間が経過したことを求める場合の使い方だと思います。

3「○ヵ月後」の定義とは
期間が終了した瞬間の日ですか?
期間が終了した日付の翌日ですか?
私の感覚では、基準日を含まない方は期間終了日と○ヵ月後は同日で、基準日を含む方は、期間が終了した日の翌日が○ヵ月後、という印象です。
 0時開始かどうかの違いですね。
A、これは条件により違うので終了した瞬間の日の場合と、終了した日の翌日の両方があると思います。

4、酔って書いて誤字したままそれをコピペしていて恥ずかしい例ですね。
×期日○期間ですね
間違っているのでわかりやすいですが私の2の話ですね。
>例えば、2月1日から1ヵ月、という場合は、
>(2+1)月 1(同)日
>という意味ですよね?
A,存在しない日でない限りはその計算の通りです。

5>⑤もし上記の通りであれば、
>「1、基準日含んだ」と「2、基準日含まない」の期間最終日は1日ズレますが、○ヵ月後の日は、1も2も同じ日になるはずだと考えますが、どうでしょうか。(24時で終了するか日中に終了するかの違い)
A,私の1と2は(存在する日付では)同じ日になると考えています。

6、末日~末日の、期間の計算の場合
かならず末日に行う事が決定している行事、行事からの一定期間(月)後の行事日の日付ですね。
文章が悪く伝わっていませんでしたね。
纏めの修正

○ヶ月後を指定した日付の計算には

1、基準日を含まず期間を足した日付

2、基準日を含んで期間を足した日付の翌日

3、末日~末日の、期間を足した時の日付

基本的に1と2は同じ日になります。(日付が存在しない日は違う日となる)

この3パターンある。

こんなんでどうでしょ?
私の理解に基づいて纏めるとこんな感じになります。

■任意の日のnヶ月後とは、原則として「nヶ月後の同日」

■ただし例外規定として、「同日が存在しない月については月末日とする」
(2月29日〜31日、4月31日、6月31日、9月31日、11月31日が同日となった場合)

ちょっと大雑把かな…
>TGD = DateSerial(Year(Now), Month(Now) + 3, Day(Now))
>+3とした根拠を示しましょう
ようわからんが、根拠やなくて、前提条件何っちゅうことですかね、わざわざ答えませんし、返答も要りませんが。
>今日は皆さんならどうやって解決するのかに興味があったのでお題を出しますので解決方法を考えてみてみてください
いろんなやり方を見たかっただけかと思て安易にカキコんだけど、なんかひっかけ問題的で、私的にはいやな感じです。
nヶ月前についても纏めてみました。

■任意の日のnヶ月前とは、原則として「nヶ月前の同日」

■ただし例外規定として、「同日が存在しない月については月末日とする」
(2月29日〜31日、4月31日、6月31日、9月31日、11月31日が同日となった場合)

ちなみに、
nヶ月後のnヶ月前≠元の日
aヶ月後のbヶ月後≠(a+b)ヶ月後
こう言う使用が不明瞭になると
1.間の日数で計算する方式
2.単純に月で、計算する方式
3.月末、月初に掛かる場合は、どちらかにする所も選択する。

と、どんどんマルチ化していかないといけないですね。
プログラミング知らない人が、要求出すと大抵こんな感じで
プログラムだけ増えて行くのに、いざ金額にすると高いとおっしゃる
そんなパターンが見えていますね。
absente
absenteさん・投稿者
Gマスター
スレ主です
ちょっと目を離してたすきに100を超えるコメントになっていて驚いています

私としては言葉としての〇ヶ月に結構悩むことがあるので、皆さんはどうなのかという素朴な疑問を呈しようとお題を提供しました

少しお題からは離れた展開になりましたが、今まで知らなかったことに触れることが出来てちょっとお得な感じがしています


本物のプログラマーなら先に仕様を出せ!と言われるお題でしたが、そこを突っ込まないで一緒に悩んでくれた皆さんにお礼を言います

特に日付の問題はゼロから自分で解決することはまずなく、プログラム言語やシステムで提供されているライブラリーを利用しますので大変楽だと思います

プログラムの楽しみは規則性を見つけては数式化し、それを実行することで何かをなすことだと思います
PCが電子計算機と言われたのがなるほどと思わせるところでしょうか

実際にプログラムをしない方もしてる方も、何気に会話で通じ合っていると思ってることでも突き詰めると多様な考え方があることに気づかされることがあると思います

さとさんが例題として出されたJRの定期券の有効期限のお話と民放の定義の比較の話は解りやすく、なるほどと思いました
どちらもより合理的にと考えた末でも結果に違いがあるという好事例だったと思います
さとさんの調査力、論理構成力には感心するばかりです

悩まなくても良いことに巻き込んでしまいましたが、お付き合いありがとうございました
個別にコメントしたかったのですが、期待以上のコメント数や参加数だったので、ここでまとめてお礼を言わせていただきます

また何かつまらない悩みのお題を出すことがあるかもしれませんのでその時も是非お付き合いくださいませ
absente さん
まだまだ、この話続けたいんですけど良いですよね。
今忙しくて他の方々への返事が出来ないんですけど、まだまだ考察中なので…
ちょっとひといき。

Siriに話して答えてくれる件ですが、これって一種の自動プログラミングなのかな。あるいはアップルが用意した質問テンプレートにたまたまマッチングしているだけなのかな。
音声認識の段階で内容が質問文あるいは命令文であるとの前提でキーワードを検出。「今日(の)」「3ヶ月後」「何日」のキーワードを検出できたのでそれぞれ日付に関する単語であると判定。ここで以下の(1)あるいは(2)
(1)アップルが予想して用意してあった日付に関する質問文に近い(想定されるキーワードをあらかじめグループ分けしておいて、日付グループ内の単語が多いなどの判定)ので、とりあえず進んで
(2)文の中身を構文解析と意味解析して入力した音声の命令/質問の内容を把握して(これすっげーむづかしい)

結果としての動作は以下のスクリプトなりメインルーチンを使って出力しているわけです。このスクリプト/メインルーチンはあらかじめアップルが用意したものか、あるいは(2)から自動で作っているのか、考えると楽しい。

今日をntpで判定して相対日付計算関数(物議を醸している部分ですが)を(引数3ヶ月後)で呼び出して出力する日付を決める。この日付を応答文を生成する関数に渡して応答文を作り、さらに音声合成関数に渡して出力。
absente
absenteさん・投稿者
Gマスター
さとさん、どうぞお続けください
私もさとさんの考察を楽しみにしてます

お題とは離れますが
「今月の月末の日付」をEXCELの計算式で求めるなんてのにも結構悩みました
一つの解を見つけましたのでもう悩んではいませんが、悩むと言うより楽しんでたのかも知れませんね
流しのモバイル人 さん

>このスクリプト/メインルーチンはあらかじめアップルが用意したものか、あるいは(2)から自動で作っているのか、考えると楽しい。

えっ「(2)から自動で作っている」なんて事はあり得るんでしょうか?
日付関数はあらかじめ持っているのだと思っていましたが…

相対日付計算関数を、引数「3ヶ月後」で呼び出して出力する日付を決めているのだと思っていましたが…

自動プログラミングって、どんな動きでどんな場合に使うものなんですか?想像がつかない。
かくいち さん

お答え読んで理解しました。

>○ヶ月後を指定した日付の計算には
>1、基準日を含まず期間を足した日付
>2、基準日を含んで期間を足した日付の翌日
>3、末日~末日の、期間を足した時の日付

これで1と2が基本的に同じという考えは私と同じです。
という事は、、、

「○ヵ月後」の定義とは、
1の場合は期間が終了した日と同日。
2の場合は期間終了日の翌日。

という事になりますよね。
「A、これは条件により違うので」と回答されていますが、これが期間を含む含まないとは別の条件によるとすると、もっとパターン数が増えてしまいますよね。

具体的には次のように、1と2は2種類ずつに分かれてしまいます。
1-A、基準日を含まず期間を足した日付
1-B、基準日を含まず期間を足した日付の翌日

2-A、基準日を含んで期間を足した日付
2-B、基準日を含んで期間を足した日付の翌日

まあ私は分かれない方が、すんなり納得できるんですけどね。
期間を含む含まないの条件と、「○ヵ月後」を決める条件は一致するというのが、一番納得できます。

つまり、午前0時から起算する場合は、期間終了の翌日が○ヵ月後。
午前0時に開始するとは限らない場合は、期間終了と同日が○ヵ月後。
>Dさん

例えば、下記のようになるという事でしょうか?

・11月30日の1ヵ月後は、12月30日
 (月末の1ヵ月後だが、12月末日にはならない)

・11月30日の1ヵ月前は、10月30日
 (月末の1ヵ月前だが、10月末日にはならない)
absente さん

日付の計算は悩みますよね。

>「今月の月末の日付」をEXCELの計算式で求める

私なら翌月1日のマイナス1日にするかな。
=DATE(YEAR(today()) , MONTH(today())+1, 1) - 1

=EMONTH(today(),0)
なんて関数で一発で出来るようですが。
さとさん

はい。それが素直な「1ヵ月後」あるいは「1ヵ月前」だと思いますよ〜

・11月29日の1ヵ月後は、12月29日
・11月30日の1ヵ月後は、12月30日
Dさん

>・11月29日の1ヵ月後は、12月29日
>・11月30日の1ヵ月後は、12月30日

了解です。Siriにも聞いてみると同じ答え。
ExcelのEDATE関数も同じ答えでした。

個人的な好みとしては、民法の1ヵ月後みたいに、月末の○ヵ月後は月末になって欲しく、前月の場合も民法とは違って月末になって欲しいなあと思っている所。どう定義すべきか…
>さとさん
そうなんですよ。
厳密に考えるとおっしゃる通り1と2は2つづつパターンがあるのですよ。
これは「期間」を中心としたプログラマブルな考え方だと思うのです。
ですが、今回のお題に対する回答としては「○ヶ月後の同日が存在する場合はその日」だと、すべての人が疑っていないのです。
だから、○ヵ月後の同日にならないパターンの2つの言い方(その期日を指す言葉)は「○ヵ月後」とは違っているのではないか?という考えになりました。
(その考えで外しています)

プログラムの仕様としては何を求めたプログラムを組むのかにより、同日にならないパターンに対しても注意が必要のようですね。

今回のように同じ言葉を使いながら含む含まないで違う場合もあり、口語?として「○ヵ月後」使うときは厳密な日付と1日ずれている場合も存在すると思うのです。
日本人って案外アバウトなんですかね?(笑)
>月末の○ヵ月後は月末になって欲しく、前月の場合も
>民法とは違って月末になって欲しいなあと思っている所

それって、「nヶ月後」ではなくて、「nヶ月後月末」を指定する必要がありそうですね。
今晩は。

プログラマ40年生の私は、迷わずこうします。
簡単が一番 !

---------------------------------------
計算方法 :
=DATE(YEAR(A1),MONTH(A1)+3,DAY(A1))-1
(↑どこかのQAのBAから(^_^;))

前提条件 : EXCEL

回答実例 :
A1セル : 2018/12/4
A2セル : 2019/3/3
---------------------------------------

です。(^_^)
ヒートアイランド_ι(´Д`υ)アツィーさん

すいません✋質問です

2018/12/4の3ヶ月後って、私などは2019/3/4だと思っていたのですが、そうではなくてその一日前(2019/3/3)にされた理由は何でしょう?

2018/12/1に「次回の会議はちょうど3ヶ月後に行う」と言われた時、2019/3/1と考えずに、2019/2/28と考えるのでしょうか?
今日が12/5
今日を起算に含めない場合、
1ヶ月後1/5
2ヶ月後2/5
3ヶ月後3/5
単純に起算月にn+3をするだけである。

但し、n+3に該当日が存在しない月の場合(29日~31日)、例外処理として月末をn+3ヶ月後の日にちとする。

ってのが一般的じゃね?
Dark Side of the Moon さん

こんばんは。(^_^)

私もそう思います。

しかし、「BA」に付いていたものなので、
何か意味が有るかも知れないと思って、
そのまま上げてしまいました。(^_^;)
ヒートアイランド_ι(´Д`υ)アツィーさん

そうでしたか、「一ヶ月後」の認識が一致していて良かったです。
しかし、その「BA(British Airways?)」掲載プログラムの意味するところは何なんでしょうね?
Dark Side of the Moon さん

British Air って、ロールスロイスのjet engine 積んでるそうですね。✈

所でBAは、マイネ王にも有りますよ。
私のプロフィールの所にも、
ベストアンサー獲得数 1 件
と、書かれていますが、
best answer の略です。
有難うございます。(^_^)
コメントするには、ログインまたはメンバー登録(無料)が必要です。