初心者のFileMaker pro Q&A (旧掲示板)

みんなに優しく、解りやすくをモットーに開設しています。 以下のルールを守りみんなで助け合いましょう。

1.ファイルメーカーで解らない事があればここで質問して下さい。 何方でも、ご質問・ご回答お願いします。 (優しく回答しましょう)

You are not logged in.

Announcement

新しい掲示板は、こちら:https://fm-aid.com/forum/t/filemaker


#1 2016-02-04 10:42:28

日付
Guest

2つの日付の差の求め方。

いつも勉強させていただいています。
早速ですが、表題にもあるように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
です。
どなたかご教授いただけると幸いです。よろしくお願いします。

#2 2016-02-04 11:04:07

チポ
Member

Re: 2つの日付の差の求め方。

Exit Loop If[$HIDUKE-Get(日付)>=3]
これでは、
  3日後以降?
となっていますよ。

両方の日付の月を得て、それを比較しないと。

でも、
単にLoopを2回繰り返せばいいことなのでは。

Offline

#3 2016-02-04 12:01:32

日付
Guest

Re: 2つの日付の差の求め方。

チポ様、早速の返信ありがとうございます。

チポ wrote:

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』が帰ってきます。
そんな風に簡単に月の差が求められないかということなんです。

#4 2016-02-04 12:10:55

Hiro
Member

Re: 2つの日付の差の求め方。

命題「○ヵ月差」自体不明瞭でコンピュータには通用しません。

日付計算をするに当り、1ヵ月の日数が確定出来ない為です。
例えば、1月31日の1ヵ月後は何月何日と答えたら??
あなたが希望する答えが返るよう、先ずは1ヵ月の日数の扱いを宣言しましょう!!

Last edited by Hiro (2016-02-04 12:24:39)

Offline

#5 2016-02-04 13:21:24

チポ
Member

Re: 2つの日付の差の求め方。

日付の「日」を考えずに、日付の年月から月数を求めるには、
  年*12 + 月
を求めて、それの減算で求められます。

Offline

#6 2016-02-04 13:45:32

日付
Guest

Re: 2つの日付の差の求め方。

Hiro様、返信ありがとうございます。

Hiro wrote:

命題「○ヵ月差」自体不明瞭でコンピュータには通用しません。

日付計算をするに当り、1ヵ月の日数が確定出来ない為です。
例えば、1月31日の1ヵ月後は何月何日と答えたら??
あなたが希望する答えが返るよう、先ずは1ヵ月の日数の扱いを宣言しましょう!!

スイマセン。VBでの開発経験が長かったもので単純に『DateDiff関数』が使えたらいいのに
と思って質問を投稿しました。
どうやらファイルメーカーでは難しいようですね。

#7 2016-02-04 13:52:21

日付
Guest

Re: 2つの日付の差の求め方。

チポ様、返信ありがとうございます。

チポ wrote:

日付の「日」を考えずに、日付の年月から月数を求めるには、
  年*12 + 月
を求めて、それの減算で求められます。

なるほど。こんな方法があったんですね。
これを踏まえて、計算式を作ってみたんですが、

(Year(生成した日付)*12+Month(生成した日付))-(Year(Get ( 日付 ))*12+Month(Get ( 日付 )))

ということですよね。
これで生成した日を『2016/3/1』、現在が『2016/2/4』でやると答えが『1』と出ました。
試しに年変わり、生成した日が『2017/1/1』現在が『2016/12/1』でやってみたところ
結果に『1』出たので、多分これで合っていると思うのですが。
ちなみに、年に12をかけるのはなぜでしょうか?

#8 2016-02-04 14:07:19

Hiro
Member

Re: 2つの日付の差の求め方。

> ファイルメーカーでは難しい
なんて全然言ってませんよ。本質を理解ください。
年と日を考慮しないと宣言すれば、あとはチポさん例やVB関数のように簡単です。

Offline

#9 2016-02-04 14:18:51

日付
Guest

Re: 2つの日付の差の求め方。

Hiro様、返信ありがとうございます。

Hiro wrote:

> ファイルメーカーでは難しい
なんて全然言ってませんよ。本質を理解ください。
年と日を考慮しないと宣言すれば、あとはチポさん例やVB関数のように簡単です。

なるほど。そういうことだったんですね。
理解していなくてスイマセン。
でも、確かに教えていただいた方法でやってみたら意外と簡単にできました。
ただ、チポさんへの返信にも書きましたがなぜ年に12をかけるのでしょう?
10や11でやってもうまくいかないのは実際にやってみてわかるんですが
なぜ12なんだろうというのがわかりません。

#10 2016-02-04 14:19:11

qb_dp
Member

Re: 2つの日付の差の求め方。

検証は、していませんが、
以下にカスタム関数が公開されています。
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

#11 2016-02-04 14:33:13

Hiro
Member

Re: 2つの日付の差の求め方。

> 年に12をかけるのでしょう?
月と言うのは、12ごとに桁上がりする12進数だからです。


ちなみに、年は10進数、月は12進数、と来て、日は?
特定できない動的進数?(その時点の年月により28~31進数と動的に変化)

Last edited by Hiro (2016-02-04 15:00:05)

Offline

#12 2016-02-04 14:56:57

日付
Guest

Re: 2つの日付の差の求め方。

qb_dp様、返信ありがとうございます。

qb_dp wrote:

検証は、していませんが、
以下にカスタム関数が公開されています。
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

なるほど。カスタム関数もあるんですね。勉強になります。
ですが、今回はチポさんにお教えいただいた方法を採用したいと思います。
せっかく調べていただいたのに申し訳ありませんでした。

#13 2016-02-04 14:58:10

日付
Guest

Re: 2つの日付の差の求め方。

Hiro様、返信ありがとうございます。

Hiro wrote:

> 年に12をかけるのでしょう?
月と言うのは、12ごとに桁上がりする12進数だからです。

おお、なるほど。そうでしたか。
理解できました。ありがとうございます。

Registered users online in this topic: 0, guests: 1
[Bot] ClaudeBot

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.014 seconds, 7 queries executed - Memory usage: 549.6 KiB (Peak: 570.51 KiB) ]