掲示板

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

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

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

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

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


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

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


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


136 件のコメント
37 - 86 / 136
> absente さん

>>echo date("Y/m/d", strtotime('+3 month'));
>+3とした根拠は何でしょう?

お題「今日の3か月後は何日?」だから
「+3 month」
なだけです。
面倒な計算はナシで。。。

月が3回変わり、日付は起算日と同じとするが、もしそこに実在する日がなければ、月が更に+1されないように月の最終日にする、という計算方法は如何でしょうか?

2018/11/29の3か月後とすると、
 【月】:11→(1回目)→12→(2回目)→1月→(3回目)→2月
 【日】:2019年の2月に29日は無いため最終である28日

結局、2019/2/28。
今日が11月30日になりましたが、「今日の1か月後」は12月30日?、それとも12月31日?
さて、重い腰を上げて前日を求める計算を考えます。
定期券のように、起算日が午前0時から始まる場合、普通の期間計算の満了日の前日が満了日となります。

前日の計算は、普通の言語であれば、日付シリアル値をマイナス1すれば求まります。また大抵の言語は、日付の計算をする関数を持っていると思いて簡単に求まると思います。

もしも、日付型が無いという言語の場合、自分で前日を計算しないといけない場合の仕様を書きます。

-------
お題:本日Y年M月D日 の午前0時を起算として、aヵ月後の満了日を、x年y月z日とする。

途中までこのコメントと同じです。https://king.mineo.jp/my/absente/reports/43401/comments/1303456
出て来た「year年month月day日」の『前日』が、満了日になります。
上の続きです。「year年month月day日」の『前日』を求めます。

day>1の場合、
 year→x , month→y , day-1→z //年月同じで日だけ前日
day≦1で、month-1>2の場合、
 year→x , month-1→y    //2~12月の1日の前日は前月になる
day≦1で、montn-1≦0の場合、
 year-1→x , 12→y      //1月1日の前日は前年12月になる

day≦1で、y=4または6または9または11の場合 //4,6,9,11月末の場合
 30→z           //末日は30日
day≦1で、y=2の場合     //2月末の場合

 //うるう年かどうか (うるう年の時f=1)
 x÷4≠0の場合、0→f        //4で割り切れない場合平年
 上記以外で、x÷100≠0の場合、1→f //100で割り切れない場合うるう年
 上記以外で、x÷400≠0の場合、0→f //400で割り切れる場合平年
 上記以外、1→f           //400で割り切れない場合うるう年

 f=1の場合、29→z         //うるう年の場合、末日は29日
 上記以外の場合、28→z      //平年の場合、末日は28日

day≦1で、上記以外の場合     //31日まである月の場合
 31→z              //末日は31日

//満了日次の通り
x年y月z日

ああ~面倒くさ~
>Dさん
>今日が11月30日になりましたが、「今日の1か月後」は12月30日?、それとも12月31日?

おお~!
11月30日の1ヵ月後は12月30日と思いきや、
民法通りに計算すると、翌日から起算してその1ヵ月後の前日、なので12月31日となりますね!

私が書いた仕様と異なります(笑)。直すのめんどい~💧
ちなみにExcelのEDATE関数とも異なります…
ああ~💧
Dさんに言われて間違いに気づいたので、明日か明後日修正して、間違えたコメント消します。

ちゃんと、起算日の翌日から数えて、期間の最後の日の前日に終了せねば答えが合わなくなってしまうのか~

なるほど~!民法考えた人、バカ賢い!いやバカじゃなくて超賢いって意味です!
ちゃんと末日の1ヵ月後は末日になるアルゴリズム(?)。凄い~!
absenteさん
 私は面白いを
 interesting ではなく 
 funnyなのだと思ってしまったので、
 書きたかったのはリレミトでした。

それでもご質問とチップを頂いてしまったので、お返事と
intersting?と思う部分を書きます。

 3か月後とは月に3を加算した同日で、同日でなければ
末日と考えていました。
 【一発で決まる」】を仕様として重視してました。
 
>方法 12×31=372のテーブルを作ってあらかじめ計算しておく
>テーブルはいつの分まで用意するのでしょう?
 うるう年を考慮しなければ1枚、するならば2枚です。 
 違う箇所は3か所[11][29],[11][30],[11][31]のデータが
(0228)か(0229)であるかだけの違いです。 
 
 テーブルは以下で372個を初期化します。
 [11][28]←(11+3)*100+28 (+3は3か月後の3)
   もし1300以上になったら1200を引いておきます。
 この場合は228になります。
 行き先が4,6,9,11月になる1,3,6,7月の処理は[x][31]←[x][30],
 行き先が2月になる11月の処理はうるう年を判定して
うるう年以外 [11][31]←[11][30]←[11][29]←[11][28]
 うるう年   [11][31]←[11][30]←[11][29]
 
 これで目的の数値は【一発】で取り出せます。 

>3か月後=120日で割り切ってもいいか?
 割り切るという意味をもう少し詳しく説明して
 頂けると思白いと思います

 2,7,8月を通過しなければ、大、小、大, 小,大,小ですから
 正確には92日、あるいは91日なのですが、わかりやすく
 90日と書くつもりで間違えて書いてしまいました。

>皆さんはどうやって悩むのかを知りたかったのです

 私の最大の悩みは

「日付時間は日本標準時を使います」の仕様でした。

 なぜ「グレゴリオ暦」でなく「日本標準時」なのか?
 最大のヒントなのか?
 全く関係ないのか?
 どうして他の人は悩まないのか?
 
 これだけはどうしてもfunnyにできませんでした。
さとさん凄いですね〜
頭が全く追い付きません。😫

ところで、11月30日の3ヶ月後の3ヶ月前はもとの11月30日?、それとも11月28日?
Dさん

民法の期間の計算方法は、過去にさかのぼって期間を逆算する場合にも類推適用されるそうです。
http://www.rilg.or.jp/htdocs/hosei/main/houmu_qa/2007/09_summer_03.html

ですので、

>11月30日の3ヶ月後の3ヶ月前はもとの11月30日?、それとも11月28日?

これは、2018年の場合、11月28日になります。
2019年の場合は翌年が閏年なので、11月29日になります。
もやもやと考え続けています(笑)
>ただし、その期間が午前零時から始まるときは、この限りでない。
ここがネックなのかな?
たとえばある火曜日に病院に訪れて、「1週間後に経過観察しますので来院して下さい。」と言われたら。翌週の火曜日に行くでしょう。
また、1月1日に友達と会い、「1年後にまた会おう!」と言ったらそれは翌1月1日です。

表題の「今日の3ヵ月後」という話は途中の民法をからめて考えると
今日(と言う日から)3ヶ月(経過)後となる話と解釈しました。
そして「今日」は午前0時から始まるので3ヶ月という期間を数える場合含むとして
「3ヶ月」は今日を含んだ期間を示す
最後に「後」という言葉が付くので「ある時点からのち」という意味で考えるのが妥当だと思います。

だから、今回のお題の答えとしては
3月1日と答えるのが正解だと思います。
(途中で言うとPHPの計算が正しくsiriは間違いではないかと)

プログラム的には存在しない日の時は翌月の1日にする。が正解かな?



3ヶ月後の3ヶ月前、楽しいお題ですね。私の答えは11月30日ですね。
1の1/3の3倍は?と似た問題と見ました。
電卓で順に計算すると1には戻れないです。
でも誰しも答えは1と答えますよね。これが正解でしょう。

コンピュータは計算で求めるのが基本なので四則演算の法則が先ず適応されると考えます。なので3ヵ月後と3カ月前は先に計算して無くす事ができると考えます。
問題が
「3ヵ月後を計算して求めなさい。」
「その後3ヶ月前を計算しなさい。」
という2条に分かれていなければ。元の日でいいかな~と思います。
Dさんの質問で、3ヵ月後の3ヵ月前、の結果が異なってしまう原因は、
民法に「期間の初日は、算入しない。」と書いてあるのが原因です。

もしも「期間の初日の翌日から期間を計算する」と書いてあったとしたら、3ヵ月後の3ヵ月前の結果は同じになります。
つまり月末のxヵ月前は月末、とちゃんと計算されるようになります。
「翌日」を使う事によって、基準の日が月末かどうかを判定できるからです。

ですが「参入しない」と書いてある為に、期間を遡る場合に前日から期間計算をする事になり、末日が異なる月の場合に、結果が異なってしまいます。

基準の日を期間に「算入しない」の理由が何かを考えますが、中途半端な1日未満の時間は切り捨てる、という事であれば、まあ仕方ないかな。

でも例えば、3月2日の1ヵ月前は2月2日ですが、3月1日の1ヵ月前は1月29
日(閏年なら1月30日)、と基準が1日違うだけで満了日に4日も差が出てしまうので、ちょっと気持ち悪いですね。
新幹線の発売日に関しては、「3月1日の1ヵ月前は2月1日」と書いてありました。
https://jr-shinkansen.net/faq011.html

民法の「日」の計算の内「初日の起算点が午前零時から始まるときは初日を算入する」方法で計算されていますね。

以下引用:
「新幹線の指定席券は、乗車日の1カ月前の午前10時から駅や旅行会社の窓口で一斉に発売します。この「1ヶ月前」が具体的にいつなのか、というお尋ねですが、前月の同じ日です。10月15日の指定券なら9月15日に発売開始となります。
前月に同じ日がない場合、当月の1日に発売開始となります。つまり、3月29日、30日、31日の指定席券は3月1日発売開始、5月31日の指定席券は5月1日発売開始、7月31日の指定席券は7月1日発売開始、10月31日の指定席券は10月1日発売開始、12月31日の指定席券は12月1日発売開始です。」
さとさんに紹介されたQ&Aは分かりやすいですね。

Q:使用日を「1月31日(1月の末日)」とした場合の予約可能の日は、「11月30日(11月の末日)」でよいでしょうか。

A:起算点は、1月31日の前日である1月30日になります(民法140条)。
そして、満了点については、1月30日から2箇月遡ると、起算日に応答する日は11月30日となり、その手前の日である12月1日が満了日となります(民法141条、143条)。したがって、②の場合には、12月1日が予約可能日となります。

→なるほど〜。11月30日には12月30日の予約しか出来ず、12月1日に12月31日と1月1日の予約ができるようになるということですね。
お陰様でスッキリしました。
有難うございます。m(_ _)m
かくいちさん

>問題が
>「3ヵ月後を計算して求めなさい。」
>「その後3ヶ月前を計算しなさい。」
>という2条に分かれていなければ。元の日でいいかな~と思います。

なるほど〜!
実に楽しい回答ですね。
お付き合い頂き有難うございました。m(_ _)m
かくいち さん

期間の計算、想像以上に面白い話題ですね!

民法の計算方法では、午前0時から始まろうが日の途中から始まろうが、11 月29日の3ヵ月後は2月28日になりますよ。

期間の計算(参考)↓
https://ja.wikipedia.org/wiki/期間


■午前0時から始まらない場合■
➀今日が11月29日だとして、「期間の初日は、算入しない」ので11月29日は期間に含まず、11月30日が起算日になります。

②「最後の月においてその起算日に応当する日の前日に満了する」ですので、2月の30日の前日に満了になります。がそもそも2月に30日はありません。

➂「ただし、最後の月に応当する日がないときは、その月の末日に満了する 」ですので、2月の末日、つまり2月28日に満了します。


■午前0時から始まる場合■
➀今日が11月29日だとして、「期間の初日は、算入しない。ただし、その期間が午前零時から始まるときは、この限りでない」ので、11月29日が起算日となります。

②「最後の月においてその起算日に応当する日の前日に満了する。」ですので、2月の29日の前日に満了になります。うるう年の場合は2月28日が満了日になります。が平年の場合は2月に29日はありません。

➂「ただし、最後の月に応当する日がないときは、その月の末日に満了する。 」ですので、うるう年でない平年の場合、2月の末日、つまり2月28日に満了します。
さとさん
 法律を新たに定める時(施行するとき)は過去に
遡らないという原則があります。
 仮に、炭酸水を所持したら処罰するという法律が施行されたとき
前日に所持していて、施行されるまでに処分していれば処罰は
されません。

 民法は契約について定めている法律です。
午前0時ピッタリに契約書を交わすことはまれですから、
15時に契約された約束事は特約がなければ午前中には遡りません
日単位としたときはこのあたりの端数処理が必要ですから、
契約は翌日にならないと効力を発揮しません。
これが「当日不算入」の理由です。

 民法では婚姻も無期限の(期限を定めない)契約として
取扱われます。金銭的な相続が発生するからです。
 出生は例外的に当日0時に遡って効力が発生します。
 15:00に生まれたら、その日のうちに通帳がつくれないと
 困りますし、午前中に何かあれば相続権が発生するのです。

 年齢の計算に関する法律が特別に定められているのはこの
関係です。結果的に4月1日生まれの人は3/31日に6歳になる
ので、前学年に編入され、学年で一番早く生まれた人は4/2
生まれというある意味ヘンテコリンなことも起こります。
明治に満年齢を導入したからなのですが、日本語の生活
では「かぞえ」が残っているからなんだと思います。

Dark Side of the Moonさん
>今日が11月30日になりましたが、「今日の1か月後」は12月30日?、それとも12月31日?

タイムショックを思い出しました。少し嬉しかったです。

明日の昨日はいつ?

タイムショックならば答えは「今日」なのだと思いますが、
こちらは多分「かぞえ」で民法と整合させるのは大変になりそう
ですね。
>Dさん
>かくいちさん

>11月30日の3ヶ月後の3ヶ月前はもとの11月30日?、それとも11月28日?

問題の解釈によって答えが異なりそうですね。

① (11月30日の3ヶ月後)の3ヶ月前は
 と解釈すると、2月28日を算出後、3か月前を算出して11月28日が満了日

② 11月30日の(3ヶ月後の3ヶ月前)は
 と解釈すると、期間0ヵ月の満了日を求めるのですから、11月30日になりますね。
フォースさん

>タイムショックを思い出しました。少し嬉しかったです。

タイムショックのことはよく分かりませんが、喜んで頂けて私も嬉しいです。
さとさん

>新幹線の発売日に関しては、「3月1日の1ヵ月前は2月1日」…
>民法の「日」の計算の内「初日の起算点が午前零時から始
>まるときは初日を算入する」方法で計算されていますね。

あれ?、「初日の起算点が午前零時から始まるときは初日を算入する」と考えてしまうと、起算点は3月1日となり、起算日に応答する日は2月1日で、その手前の日である2月2日が満了日になりませんか?
Dさん

>あれ?、「初日の起算点が午前零時から始まるときは初日を算入する」と考えてしまうと、起算点は3月1日となり、起算日に応答する日は2月1日で、その手前の日である1月31日が満了日になりませんか?

あ、本当ですね。
「手前の日」は過去に遡って手前、みたいなので翌日となり、2月2日発売となってまいますね。
でも、民法の午前0時開始ではないルールに沿うと、1月29日が起算日になりますので、JRは独自ルールという事になりますね。
(JRのルールの方が常識的な感覚の気がする)
フォースさん

「日」未満の端数切捨て、の前提で当日は含まない、とされているので、仰る通りですね。
月末のxヵ月後も末日になるかどうか、とかいうのは結果的にたまたまそなっただけで、本来の目的は端数切捨てですね。
3ヵ月後という言葉は口語?なのでこの意味の解釈ですね。

3ヶ月という期間が経過した後日(翌日)。という意味だと考えています。
新幹線の1ヶ月前も「一ヶ月という期間の前日」ですよね?。

口語?における「後」という使い方なんですが、どうでしょうか?

私はそのように考えています。
そうですね。
「1年後(同月同日)」というのは、「2年目の初日」のことですからね。
さとさん

しかし、民法方式で一ヶ月前の予約開始日を求めると、使用日が12月1日なら起算点は前日の11月30日となり、11月30日から一ヶ月遡る応答日が10月30日、その手前の日である10月31日が満了日(=予約可能日)になってしまうので違和感大アリですね。

やはり、予約開始日などは、民法方式ではなくJR方式のほうが実態に近いですね。
→つまり、単純に使用日から1ヶ月(または2ヶ月)遡るだけで、該当日が無い月の場合のみ翌月1日にする。
かくいちさん

>新幹線の1ヶ月前も「一ヶ月という期間の前日」ですよね?。

1ヵ月という期間の前日ではなく、1ヵ月という期間の初日ですね。

ただし、例外として、今日を期間の1日分として含めた場合(1日未満切り上げ)には、1ヵ月という期間の前日になります。

でも普通の感覚として、今日は期間として含めません。
でないと、もし今日を期間に含めるならば、「今日の1日前は今日」になってしまいます。
かくいちさん

何か月後は何日?という問題の場合
期間の満了日を指すのか、満了日が終わった時点(24時)の日付を指すのか、という事ですね。

・満了する日を指す場合は、2月28日、
・満了日が終わった瞬間の24時の日付は、3月1日の午前0時

という事で、満了日が終わった瞬間の後、というのがかくいちさんの考えですね。それもわかります。

私の考えでは、そもそもは、本来なら口語の感覚では、
11月29日の昼頃に買った1ヵ月チケットの開始期間は、「11月29日の昼頃~2月28日の昼頃」が本来の満了日時なわけです。

つまり、期間満了する日も2月28日で、期間満了した直後の日も2月28日という事です。

満了日の24時まで、というのは民法上の日未満切り捨ての考え方で、こっちの方が普通の感覚とは異なりますね。
かくいちさん

もし仮に、「何か月後」の答えが、満了日が終わった翌日、を指すのだとすると、次の例の場合に変な事になりますね。

(例)今日の1日後は?
→普通の感覚では、「今日の1日後は明日」ですよね。
これは現在時刻から1日(24時間)経過後の日を示していると思います。

→かくいちさん方式で、期間満了日の翌日が「○日後」だとすると、「今日の1日後は明後日」になってしまいます。

→民法の「今日を期間に含めない」計算でも「今日の1日後は明後日」になって、こちらも変です。
Dさん

>「1年後(同月同日)」というのは、「2年目の初日」のことですからね。

それは1年の起算日が今日の場合ですね。
つまり、今日の午前0時から期間を開始するものとして、今日を1日分として期間に含めている場合です。年度、月度、定期券などの期間はその考え方ですね。

このように、午前0時から開始する場合は、1年後とは同月同日ではなく、同月同日の前日になります。
Dさんが書かれている「1年後(同月同日)」というのは間違いで「1年後(同月同日の前日)」が正しいです。
同年同日は1年後ではなく、期間満了日(1年後の日)の翌日です。2年目の開始日ですね。

民法の午前0時から始まらない計算方法では、1日未満を切り捨てて、明日から1年間をカウントする場合は、1年後は同年同日の24時です。
Dさんが書いた「1年後(同月同日)」が正しくなります。
ただ、この場合の2年目の開始は、同年同日の翌日午前0時からとなります。「2年目の初日」の方が間違いになります。
さとさん

私が書いたのはかくいちさんのコメントにある「口語?」についてですので、民法の話ではありません。

つまり、東日本大震災から1年後というのを「普通は」2012年3月11日としているということを言っているもので、それは「2年目の初日」のことでもあるということです。

間違ってるかな?
Dさん

考え直してみました。
Dさんの言う「普通は」というのは、恐らく「自然的計算方法」を言いたいのだと思います。Wiki参照。
https://ja.wikipedia.org/wiki/期間

これは、「瞬間から瞬間までの時間の継続を期間として計算する方法(最小単位は秒)」です。
私が「普通の感覚」と書いているものです。

この「自然的計算方法」で東日本大震災から1年後とは、

2011年3月11日14時46分18秒の1年後
→ 2012年3月11日14時46分18秒
の事です。この日時の瞬間から、2年目が始まります。

2012年3月11日13時は1年目、2012年3月11日15時は2年目という事ですね。
つまり、2012年3月11日は、震災から1年の日でもあり、震災から2年目の日でもあります。

そういう意味では、「自然的計算方法」ではDさんが書いている事は合致していますね!

民法で定められているように、日単位に切捨てや切り上げをした場合には、上の私のコメントになりますがこれは「自然的計算方法」の話ではありません。

で、かくいちさんの話に戻ると、11月30日の3ヵ月後は「自然的計算方法」では2月28日の日中の何時か、であって3月1日にはならない、という事が本来言いたかった事です。
リンク失敗していたので、再度張ります。
Wikiの「期間」の説明です。
https://ja.wikipedia.org/wiki/期間
Dさん

JRの予約開始日の事ですが…

>やはり、予約開始日などは、民法方式ではなくJR方式のほうが実態に近いですね。

実態に近い=「自然的計算方法」に近いという事でしょうね。

3月1日の1ヵ月前を自然的計算方法で考えると、
3月1日の午前10時に新幹線に乗るなら2月1日の午前10時から発売するのが、もっとも自然な1ヵ月前という事になります。

民法では無理矢理切捨てているので、月初1日が基準日(乗車日)の場合、月末の日数によっておかしな結果になってしまっていますよね。


>つまり、単純に使用日から1ヶ月(または2ヶ月)遡るだけで、該当日が無い月の場合のみ翌月1日にする。

もっと自然的計算法に近づけるなら、「該当日が無い月の場合は、その月の末日にする。」の方が近いですかね?どうでしょう。(よくわからなくなってきた)
さとさん

>民法の午前0時から始まらない計算方法では、1日未満を切り捨てて、
>明日から1年間をカウントする場合は、1年後は同年同日の24時です。

24時という瞬間ではなく、同年同日の丸一日が1年後ですよね?


>ただ、この場合の2年目の開始は、同年同日の翌日午前0時
>からとなります。「2年目の初日」の方が間違いになります。

この2年目、1年目という概念に民法を持ち込むのは多分できないのではないでしょうか?
だって1年目に発生当日が含まれないなんてありえないですよね。

つまり、1年目は発生当日から365日、2年目は発生当日から366日目からの365日(とりあえず閏年は無視)であり、2年目の初日が1年後(翌年同月同日)になるということかと思います。

また、発生時刻の前後で1年目と2年目が切り替わるというのも無理があのでは?
Dさん

何の為の説明を今しているのかわからなくなったので、確認させて下さい。

例えば、
2011年3月11日の1年後が、翌年同月同日の2012年3月11日である。
なおかつこの2012年3月11日はが、2年目の初日でもある。
という事ですよね(別に異論は無い)

それで、例えば
2018年11月10日の3ヵ月後は、3ヵ月後同日の2019年2月10日となりますよね。
なおかつ、この2019年2月10日は、4か月目の初日でもある。
という事ですよね。

で、このスレの本題に戻ります。
2018年11月29日の3ヵ月後は、2019年3月1日になるという事ですか?
その理由は、2019年3月1日が、4ヵ月目の初日であるから、という事でしょうか?

なぜ翌期間の初日と期間の最終日が同一日の場合、末日にならず翌月になるのでしょうか?

かくいちさんの「3月1日」という答えの説明をする目的で、「(同月)同日に相当する日」が「翌期間の開始日」でもあるという話をされていると思っていますが、合っていますか?
Dさん

わからないので、例をあげて質問してみます。

■例1
例えば、11月10日に、「翌日」から3ヵ月有効な定期券を買ったとします。
期間は、11月11日~2月10日だと思います。

満了日は、最終月の同日の2月10日ですね。
次の定期の開始(4ヵ月目)は、2月11日から始まります。

私は「11月10日の3ヵ月後」は、この定期の数え方と同じく、満了日の2月10日だと思います。
これはおかしいですか?
Dさんの考えでは、「3か月後=次の期間の開始日」となるのが正しい、となるのでしょううか?
つまり11月10日の3ヵ月後とは、2月11日だという意味ですか?


■例2
例えば、11月10日に、「当日」から3ヵ月有効な定期券を買ったとします。
期間は、11月10日~2月9日だと思います。

この定期の満了日は、2月9日だと思います。
次の定期の開始(4ヵ月目)は、2月10日から始まります。

「11月10日の3ヵ月後」は、満了日の2月9日なのか、というと私は違うと思います。2月10日だと思います。
なぜなら、「自然的計算方法」では開始の時刻が午前0時では無く、11月10日の内の途中から始まる為、11月10の途中の時刻までかかると感覚的に思うからです。

ところでDさんの考え方で説明すると、
「3ヵ月後」とは、月の同日に該当するから2月10日になる、という事になのでしょうか。
それとも「次の期間の開始日」が2月10日だから3ヵ月後は2月10日って事ですか?
さとさん

「2018年11月29日の3ヵ月後」の正解はよくわかりません。
閏年2月29日の1年後は翌年の2月28日か3月1日か、という問題と同じですよね。

民法で言う有効期限1年の場合は2月28日一杯で失効ということで正解と思いますが、「1年後はいつか?」という問いの答えとは少し異なるように思います。

とりあえず誕生日方式で考えると、誕生日前日24時の時点で齢が一つ上がるものの、記念日としてお祝いするのは翌3月1日になります。

従って、「1年後の記念日」なら3月1日で良さそうですが、「1年後」と「1年後の記念日」が同一と考えて良いのかどうかが正直よく分からないですね。
さとさん

またややこしい質問ですね。

■例1
「11月10日の3ヵ月後」は、2月10日だと思います。
3ヶ月後にまた(翌日から有効な)次の定期を買いますので、次のスタートになります。

■例2
「11月10日の3ヵ月後」は「月の同日」であると同時に「次の期間の開始日」だから2月10日で良いと思います。

もうこのへんで勘弁して下さい。m(_ _)m
Dさんとさとさんの感覚の違いが何か判ったきがする。
ドチラが正しいとかではなく。
途中にでた、3ヵ月後の3ヶ月前の話や何を重視するか?なんですね。
計算の順序の考え方。
 1ヶ月という期間を計算したのち、その次の日とする場合。
 1ヶ月後という日を探し、無い場合は月末にするという場合。
この2つなんですね。


(例)今日の1日後は?
→普通の感覚では、「今日の1日後は明日」ですよね。
これは現在時刻から1日(24時間)経過後の日を示していると思います。
→かくいちさん方式で、期間満了日の翌日が「○日後」だとすると、「今日の1日後は明後日」になってしまいます。
→民法の「今日を期間に含めない」計算でも「今日の1日後は明後日」になって、こちらも変です。

こちらの問いに対してですが。
「今日の」という時点で、「今日」と言う日が基準になってますね?だから午前0時から始まる今日は含めるのです。だから今日という1日が経過した翌日である明日。でいいと思います。


抜粋の抜粋の抜粋
https://king.mineo.jp/my/absente/reports/43401/comments/1303265
民法
第百四十条 日、週、月又は年によって期間を定めたときは、期間の初日は、算入しない。ただし、その期間が午前零時から始まるときは、この限りでない。
Dさん

ではもう話を止めますね。

今、いろんな話がごちゃごちゃに議論されていると思います。

そもそもの期間の計算の仕方が各人違うので、その議論をしながら、更に、存在しない月末日の話や、閏年やら出て来て、話が混乱してしまっていると感じています。

余談ですけど、誕生日の数え方(民法)は、定期券の期間や、会計期間などの数え方と同じですね!

ではこれにてDさんに話しかけるのは止めます。
かくいちさん

民法の期間満了日と「〜日後」をリンクさせようとし過ぎではないですか?

リンクさせて期間満了日の翌日を「〜日後」だとすると、「本日12時の一日後は明後日」になってしまいますし、「11月30日12時の一ヶ月後は12月31日」になってしまいませんか?
>かくいち さん

なるほどー。めっちゃ理解できました。

>(例)今日の1日後は?
>「今日の」という時点で、「今日」と言う日が基準になってますね?だから午前0時から始まる今日は含めるのです。だから今日という1日が経過した翌日である明日。でいいと思います。

この計算方法を採用される場合…例えば

●10月1日の1ヵ月後は、10月1日を1日目とし1ヵ月後の10月31日の翌日、11月1日になりますよね。
●10月10日の1ヵ月後は、10月10日を1日目とし1ヵ月後の11月9日の翌日、11月10日になりますよね。
●10月30日の1ヵ月後は、10月30日を1日目とし1ヵ月後の11月29日の翌日、11月30日になる。
●10月31日の1ヵ月後は、10月31日を1日目とし1ヵ月後の11月30日の翌日、12月1日になる。

という訳ですね?
Dさんが言っていた話(n年後 = n+1年目の初日)と一致すると思ってやっと理解できました。

が、今Dさんのコメントを見ると、どうも意見が違うのでしょうか??
満了日の「翌日」というより、満了日時の「直後」という意味で理解しました。
「11月30日 0時の1ヶ月後は12月29日24時の次の瞬間の、12月30日 0時00分01秒」という事です。
つまり「11月30日12時の1ヶ月後は12月30日12時00分01秒」となるという意味です。
かくいちさんの考え方だとこっちで計算するのですね。
(当日の午前0時から起算)

>■例2
>例えば、11月10日に、「当日」から3ヵ月有効な定期券を買ったとします。
>期間は、11月10日~2月9日だと思います。
>この定期の満了日は、2月9日だと思います。
>次の定期の開始(4ヵ月目)は、2月10日から始まります。

これの計算は次のように行いますよね。
・期間は、11月10日~2月9日なので、満了日は2月9日
・11月10日の3ヵ月後は、満了日の翌日の「2月10日」となる。
私は「〜年後」という概念は民法の期間満了日とは無関係に考えたほうが良いと思っています。

「11月30日12時に起きた出来事の一ヶ月後」は、「翌月同日」なので、12月30日の丸一日です。12時ではありません。

そして、出来事が起きた当日から一ヶ月後の前日までが1ヶ月目であり、「翌月同日」から始まる一ヶ月間が2ヶ月目なのだと思います。

いずれにしても、民法の期間満了日とリンクさせて考えてしまうと、「本日12時に起きた出来事の一日後は明後日」になってしまいますので、リンクさせずに考えることをお薦めします。
さとさんとDさんって書いたけど、さとさんと私の話と書いたほうが正確でしたね。少し訂正。

最初にスレ主言っているように解釈により別の日になる可能性も示唆されています。(理由で日付が決定するという逆説にて)

だから、私としてはどんな説もあってよいと思うのですよ。
途中の私の話の、3ヶ月後という日付を求める意味として
プログラム的にどのような解釈によってそれを求めるのかだと思います。

さて、Dさん
期間満了日の翌日という話は「日」という単位でしか話をしていないからです。私の考えでは、「指定の期間が過ぎた瞬間の所属する日」という基準で「後」の日付として捉えています。
12時という具体的な時間が存在するなら、その答えは時間を基準に算出するべき案件と思いますが、1日後という言葉は24時間後と置き換える状況かどうかで回答が変わります。
今回は明確に時間がスタートとなりますので1日であれば翌日の12時が期限でそれを過ぎた瞬間が所属する日として翌日という答えが可能です。

1月1日午前0時の24時間後は?1月2日では?
24時間という期間は1月1日を越えられませんなのに答えは翌日になってしまいませんか?(あくまで私の考えですが)
(1月1日の終了する瞬間を指すという答えもあるとは思いますよ)


もう一度いいますが、私の中では整合の取れた答えとなっていますので私の中ではとても腑に落ちています。しかしながら上手く伝えれていないと思う部分もありますので質問大歓迎です。

また、他人との違いを認識する作業はとても楽しいです。
このお題では他人の認識の違いを楽しむ物だと思っています。
答えが違っても誰も間違っていない。そんな話と思っています。
だって期間は法律として考えが決まっていますが、この話はちょっと違うと思うのですよね。

他人と違う意見だとしても、それが否定ではないという事を大前提でお願いします。よろしくお願いします。
かくいちさん

>それが否定ではないという事を大前提でお願いします。

私もそのようにお願いします。
「間違っている」という否定コメントではなく、「その理屈でいくとこんな答えになってしまいませんか?」という問いだと答えやすいですね。

さて、そこで質問ですが、
例えば11月10日の12時に地震があったとして、その地震から1ヶ月後となると私は12月10日だと思うのですが、かくいちさんの計算だと「期間満了日の翌日」になるので12月11日になってしまいませんか?

そこはどうなんでしょう?
👆追伸です。

「その地震から1ヶ月後」という問いを「その地震のあった日から1ヶ月後」と置き換えることで当日を含めた期間を設定するというご趣旨であれば、1ヶ月後は12月10日となりますので、私としては全面的に賛成です。
Dさん

さて、そこで質問ですが、
例えば11月10日の12時に地震があったとして、その地震から1ヶ月後となると私は12月10日だと思うのですが、かくいちさんの計算だと「期間満了日の翌日」になるので12月11日になってしまいませんか?

そこはどうなんでしょう?

これも「指定の期間が過ぎた瞬間の所属する日」として考えます。
11月10日から一ヶ月間は12月9日まで
最初の日を含む計算なので午前0時スタートとして
11月10日午前0時から11月9日の終了する瞬間までと考えます
これは1ヶ月間ですよね?
「指定の期間が過ぎた瞬間の所属する日」という理屈をつけると
12月9日の終了する瞬間を過ぎた瞬間の所属する日となり
一ヶ月後は12月10日と考えます。
次に12時という時間を付けて考えます。
厳密には
11月10日午前0時から12月9日の終了する瞬間
上記に12時間を足した時間が1ヶ月という期間を表します。
11月10日午後12時から12月10日の11時が終了する瞬間
そして
「指定の期間が過ぎた瞬間の所属する日」という理屈をつけると
12月10日の11時が終了する瞬間の過ぎた瞬間の所属する日
となり答えは12月10日となります。


まだまだもやもやと考えていたのですが。
3か月前の反対として3ヵ月後を指定する場合などはやはりおかしくなるのではないかと・・・
数学的(コンピューター的)には同じなのですが
条件によりやはり処理を変える必要があるかと。
たとえば
3ヶ月後の日付まで予約可能なシステムを組む場合は手前処理
3ヶ月後の日付まで何かを禁止するなら後処理
そうなるのではないかな~?
かくいちさん

「nヶ月前」は私も悩むところ。

手前処理、後処理、とは具体的にどんな計算を指しますか?
かくいちさん

>「指定の期間が過ぎた瞬間の所属する日」として考えます。

ということは、民法の「起算点」や「期間満了日」という概念とは別に考えるということですよね?
それであれば全面的に賛成です。
コメントするには、ログインまたはメンバー登録(無料)が必要です。