過去の桐井戸端BBS (桐ver.9)
23843 任意の時の年月日時分差を求めたい wandasaga 2003/12/10-22:57
桐v9,MS2000,Aの年月日時分からBの年月日時分の間の年月日時分の差を求めたいのですが、
過去歴・佐田先生のPAGEを拝見しても解決出来ません。
即ち、生:1941/05/03 02時15分から2003/12/10(現在の日付)は年齢の関数で出ますが、
任意の2003/12/10 12時30分 の間になるとその間の年月日時分差が閏年の関係で計算結果が手計算と違います。
軸上のA点から同じ軸上のB点の間を基準年を基に考えれば出て来るはずなのですが、駄目です。
初心者用に教えて下さい。

23848 Re:年月日時分差 うにん 2003/12/11-12:42
記事番号23843へのコメント
「手計算」とはこういうのでしょうか。

項目名 データ型 項目計算式
分   整数   #MOD(#分([B])-#分([A])+60,60)
時   整数   #MOD(#時([B])-#時([A])+24,24)-(#分([B])<#分([A]))
日   整数   #MOD(#日([B])-#日([A])+#日(#月末(#月数加算([B],-1,1))),
#日(#月末(#月数加算([B],-1,1))))-(#時([B])×100+#分([B])<#時([A])×100+#分([A]
))
月   整数   #MOD(#月([B])-#月([A])+12,12)-(#日([B])×10000+#時([B])
×100+#分([B])<#日([A])×10000+#時([A])×100+#分([A]))
年   整数   #年([B])-#年([A])-((#月([B])×1000000+#日([B])
×10000+#時([B])×100+#分([B]))<(#月([A])×1000000+#日([A])×10000+#時([A])
×100+#分([A])))

23854 Re:年月日時分差 アックン 2003/12/11-16:07
記事番号23843へのコメント
wandasagaさん、こんにちは。
求めたい値を具体的に書かれてないので、ぼくには質問がよく理解できないのですが。
[B]-[A]の値は経過時間になります。
経過時間を○時○分とか、○日○時○分と表示したいのですか?
それとも、
>生:1941/05/03 02時15分から2003/12/10(現在の日付)は年齢の関数で出ますが、
というところをみると、正確な年齢を表示したいのですか?
○年とか、○才というように。
もしそうなら、#年齢は時間を評価しません。
正確な年齢を求めたいときは #年数を使えばよかったと思いますよ。
23867 Re:年月日時分差 うにん 2003/12/12-12:40
記事番号23848へのコメント

#MODを使う位置が間違っていました^^;あれではマイナスが出てしまいます。

項目名 データ型 項目計算式
時   整数   #MOD(#時([B])-#時([A])-(#分([B])<#分([A]))+24,24)
日   整数   #MOD(#日([B])-#日([A])-(#時([B])×100+#分([B])<#時([A])
×100+#分([A]))+#日(#月末(#月数加算([B],-1,1))),#日(#月末(#月数加算([B],-1,1))))
月   整数   #MOD(#月([B])-#月([A])-(#日([B])×10000+#時([B])×100+#分([B])
<#日([A])×10000+#時([A])×100+#分([A]))+12,12)

#年数なんてのもあるんですね。#月数とかも使うとすっきりするかもしれませんが、
「月末と閏年を調整します。」なので希望に添うかどうかが問題です。
#月数( d"2002/10/31" , "2002/11/30" )#タ→ 1
と書いてあります。普通はそれでいいと思います。
私の式は手計算を模した?馬鹿正直なものなので、0ヶ月30日になります。

結局うるう年も含めて月末の処理をどうしたいのか明確にしないと答えが出ません。

23869 Re:年月日時分差 うにん 2003/12/12-13:06
記事番号23867へのコメント
>#年数なんてのもあるんですね。#月数とかも使うとすっきりするかもしれませんが、
>「月末と閏年を調整します。」なので希望に添うかどうかが問題です。

#月数と#日数だけで、#年数には「調整」が書いてないと思ったら、
うるう年の調整がされないようです。
2004/ 2/29〜2005/ 2/28が#年数だと0で#月数だと12です。

23928 Re:年月日時分差 今村 誠 2003/12/15-18:38
記事番号23843へのコメント
wandasagaさんこんにちは
サンプルをアップしてみました。
時間は考慮していません。

23964 Re:年月日時分差 佐田 守弘 2003/12/19-23:19
記事番号23843へのコメント
wandasagaさん
求めたいのは、2つの日時値の間の日付時間差を、年月日時分秒の単位で求めたいという事ですね。
これは一筋縄では行きません。
ここでは考え方だけを示しておきます。
・年差を求めて、起算日のその年数を加える。
#年数関数を使って、2つの日時の間の年数を求めます。
この年数を起算日に#年数加算を使って加えれば、終了日時から1年以内の日付時刻が得られます。
・同様に月差を求めて、その月数を加える。
得られた日付と終了日との月差を求め、この月数を加えると、1月以内の日付時刻が得られます。
・同様に日数を求めて、その日数を加える。
同様に日数についても行いますが、日数の場合、おそらく時刻が前後しても日付だけの日数になると思うので、
時刻部分を比較して1日減ずるかどうかの判断が必要になると思います。
・以上で終了日まで1日以内の日付が得られるので、後は時間差を求めます。
時間差は、単に日時値の減算で計算できるはずだと思います。

うるう年の処理
一例としてうるう年の2月29日から、翌年の2月28日を1年とみなすのかどうか、
このあたりはどの様に考えるかも含めての課題になります。

佐田守弘(KS-00119)

戻る