日付差の計算

投稿者:Knight 投稿日:2024/10/08(Tue) 11:28:22 No.2409

お世話になります。

https://produ.irelang.jp/docs/primitive/datetime.htm#%E6%97%A5%E4%BB%98%E5%B7%AE
以下のサンプルプログラムで
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜
ーー15を表示します
「2020/9/10」を日時形式化して、開始日とする
「2021/4/15」を日時形式化して、終了日とする
(開始日と終了日の日付差)を表示する
〜〜〜〜〜〜〜〜〜〜〜〜〜〜〜

このサンプルに、さらに次の1行を加えて

(開始日と終了日の日付差)を「yyy歳Mヵ月」に整えて表示する
実行すると
「001歳8ヵ月」
と表示されます。

日付差の計算か、「整える」のバグはないのでしょうか?
よろしくお願いいたします。

日時期間形式は、日数までです

投稿者:ゆうと 投稿日:2024/10/19(Sat) 03:00:35 No.2413

こんにちは

> (開始日と終了日の日付差)を「yyy歳Mヵ月」に整えて表示する

「日付差」の結果は、日時期間形式となります。
日時期間形式で表現できるのは、日数までです。
ひと月の日数は、年と月によって変わるため、日付差を使ってプログラムにあるような年数や月数を求めることはできません。

そのため、歳を計算する場合には、日付差を使わずに次のように月数を求めてから歳と月をそれぞれ計算してください。
------
「2020/9/10」を日時形式化して、開始日とする
「2021/4/15」を日時形式化して、終了日とする

開始日の月が終了日の月より大きければ
  月数=(12-開始日の月+終了日の月)+(終了日の年-開始日の年-1)*12
でなければ
  月数=(終了日の月-開始日の月)+(終了日の年-開始日の年)*12
そして
開始日の日が終了日の日より大きければ
  月数を減らす
そして
「[(月数-(月数%12))/12]歳[月数%12]ヵ月」を表示する
------

Re: 日時期間形式は、日数までです

投稿者:Knight 投稿日:2024/10/20(Sun) 10:03:27 No.2415

こんにちは、お世話になります。

> 日時期間形式で表現できるのは、日数までです。
そうなのですね。
> ひと月の日数は、年と月によって変わるため、日付差を使ってプログラムにあるような年数や月数を求めることはできません。
けっこう面倒なことなのですね。
年齢や、就業期間など、「〇年〇ヵ月」で表現するものは結構ありそうで、
エクセルなどでは、DATEDIF関数で簡単に求めることができますよね?
ぜひ、プロデルでも実装しただけると嬉しいですが。
よろしくお願いいたします。

▲ページの先頭へ

- WebForum -