みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。
1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)
You are not logged in.
Pages: 1
いつも勉強させていただいています。
早速ですが、表題にもあるように2つの日付の差を簡単に求める方法は何かないでしょうか?
現在の日付から2か月後の日付になったら処理を終了するスクリプトを組もうとしているんですが
どうしてもうまくいきません。
組みたいスクリプトとしては、
例)
変数を設定[$SA;値:1]
変数を設定[$HIDUKE;値:Date (Month(Get(日付)) + $SA ; 1 ; Year (Get(日付)))]
Loop
~
(行いたい処理)
~
変数を設定[$SA;値:$SA+1]
変数を設定[$HIDUKE;値:Date (Month(Get(日付)) + $SA ; 1 ; Year (Get(日付)))]
Exit Loop If[$HIDUKE-Get(日付)>=3]
End Loop
みたいにできると理想なんですが。
VBだと『DateDiff関数』があって年や月、日の差が簡単に求められるのですが
ファイルメーカーにはないんでしょうか?
当方の環境は、
OS:Win7 FM:ファイルメーカー11Pro
です。
どなたかご教授いただけると幸いです。よろしくお願いします。
Exit Loop If[$HIDUKE-Get(日付)>=3]
これでは、
3日後以降?
となっていますよ。
両方の日付の月を得て、それを比較しないと。
でも、
単にLoopを2回繰り返せばいいことなのでは。
Offline
チポ様、早速の返信ありがとうございます。
Exit Loop If[$HIDUKE-Get(日付)>=3]
これでは、
3日後以降?
となっていますよ。両方の日付の月を得て、それを比較しないと。
でも、
単にLoopを2回繰り返せばいいことなのでは。
そうなんですよね~。ファイルメーカーで単純に『$HIDUKE-Get(日付)』と
やると、日数が出てきてしまうんですよね。
例えば、現在が『2016/02/02』で$HIDUKEが『2016/04/01』とかだと
確か『59』って出てたかな?
これは『59』日ってことですよね。
これを『1』か月としたいんですがうまくいかないんです。
例ではループを挙げましたが、処理によってはループを回さず
生成した『$HIDUKE』と現在の日付の差が2か月以上あったら処理をしないとか
する場合があります。
例えば、
変数を設定[$HIDUKE;値:Date (Month(Get(日付)) + 1 ; 1 ; Year (Get(日付)))]
If[$HIDUKE-Get(日付)>=3]
現在のスクリプトの終了[]
End If
~
(日付の差が3か月以内の時の処理)
~
としたい場合、ループの回数で差を判別することができませんよね。
それに、単に月だけとって比較すると年が変わった時に問題が起きる可能性が
ありますよね。例えば生成した日付が『2017/01/01』で現在が『2016/12/01』みたいな。
またVBに話になってしまいますが質問にも書いた『DateDiff関数』なら
『DateDiff("m",生成した日付,現在の日付)』(だったかな?)と組むと
戻り値は『2』が帰ってきます。
そんな風に簡単に月の差が求められないかということなんです。
命題「○ヵ月差」自体不明瞭でコンピュータには通用しません。
日付計算をするに当り、1ヵ月の日数が確定出来ない為です。
例えば、1月31日の1ヵ月後は何月何日と答えたら??
あなたが希望する答えが返るよう、先ずは1ヵ月の日数の扱いを宣言しましょう!!
Last edited by Hiro (2016-02-04 12:24:39)
Offline
日付の「日」を考えずに、日付の年月から月数を求めるには、
年*12 + 月
を求めて、それの減算で求められます。
Offline
Hiro様、返信ありがとうございます。
命題「○ヵ月差」自体不明瞭でコンピュータには通用しません。
日付計算をするに当り、1ヵ月の日数が確定出来ない為です。
例えば、1月31日の1ヵ月後は何月何日と答えたら??
あなたが希望する答えが返るよう、先ずは1ヵ月の日数の扱いを宣言しましょう!!
スイマセン。VBでの開発経験が長かったもので単純に『DateDiff関数』が使えたらいいのに
と思って質問を投稿しました。
どうやらファイルメーカーでは難しいようですね。
チポ様、返信ありがとうございます。
日付の「日」を考えずに、日付の年月から月数を求めるには、
年*12 + 月
を求めて、それの減算で求められます。
なるほど。こんな方法があったんですね。
これを踏まえて、計算式を作ってみたんですが、
(Year(生成した日付)*12+Month(生成した日付))-(Year(Get ( 日付 ))*12+Month(Get ( 日付 )))
ということですよね。
これで生成した日を『2016/3/1』、現在が『2016/2/4』でやると答えが『1』と出ました。
試しに年変わり、生成した日が『2017/1/1』現在が『2016/12/1』でやってみたところ
結果に『1』出たので、多分これで合っていると思うのですが。
ちなみに、年に12をかけるのはなぜでしょうか?
> ファイルメーカーでは難しい
なんて全然言ってませんよ。本質を理解ください。
年と日を考慮しないと宣言すれば、あとはチポさん例やVB関数のように簡単です。
Offline
Hiro様、返信ありがとうございます。
> ファイルメーカーでは難しい
なんて全然言ってませんよ。本質を理解ください。
年と日を考慮しないと宣言すれば、あとはチポさん例やVB関数のように簡単です。
なるほど。そういうことだったんですね。
理解していなくてスイマセン。
でも、確かに教えていただいた方法でやってみたら意外と簡単にできました。
ただ、チポさんへの返信にも書きましたがなぜ年に12をかけるのでしょう?
10や11でやってもうまくいかないのは実際にやってみてわかるんですが
なぜ12なんだろうというのがわかりません。
検証は、していませんが、
以下にカスタム関数が公開されています。
FileMaker Custom Function:DateDif( date1 ; date 2 ; flag ) : https://www.briandunning.com/cf/1326
FileMaker Custom Function:DateDifference ( date1 ; date2 ; format ) : https://www.briandunning.com/cf/536
Offline
> 年に12をかけるのでしょう?
月と言うのは、12ごとに桁上がりする12進数だからです。
ちなみに、年は10進数、月は12進数、と来て、日は?
特定できない動的進数?(その時点の年月により28~31進数と動的に変化)
Last edited by Hiro (2016-02-04 15:00:05)
Offline
qb_dp様、返信ありがとうございます。
検証は、していませんが、
以下にカスタム関数が公開されています。
FileMaker Custom Function:DateDif( date1 ; date 2 ; flag ) : https://www.briandunning.com/cf/1326
FileMaker Custom Function:DateDifference ( date1 ; date2 ; format ) : https://www.briandunning.com/cf/536
なるほど。カスタム関数もあるんですね。勉強になります。
ですが、今回はチポさんにお教えいただいた方法を採用したいと思います。
せっかく調べていただいたのに申し訳ありませんでした。
Hiro様、返信ありがとうございます。
> 年に12をかけるのでしょう?
月と言うのは、12ごとに桁上がりする12進数だからです。
おお、なるほど。そうでしたか。
理解できました。ありがとうございます。
Pages: 1
[ Generated in 0.014 seconds, 7 queries executed - Memory usage: 549.6 KiB (Peak: 570.51 KiB) ]