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

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

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

You are not logged in.

Announcement

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


#1 2014-05-28 21:31:47

なみ
Guest

日付の次月・前月

日付フィールド(グローバル):2014/06/01 と入力されています。

*次月ボタン:
1:『次月』ボタンを押すと、2014/07/01 と日付フィールド内容を変更したい。
2:もちろん、2014/07/01時点で『次月』ボタンを押すと、次は2014/08/01・・・
3:2014/12/01時点で『次月』ボタンを押すと、2015/01/01 としたい。

*前月ボタン:
1:『前月』ボタンを押すと、2014/05/01 と日付フィールド内容を変更したい。
2:もちろん、2014/05/01時点で『前月』ボタンを押すと、次は2014/04/01・・・
3:2014/01/01時点で『次月』ボタンを押すと、2013/12/01 としたい。


次月ボタンにスクリプト引数:1
前月ボタンにスクリプト引数:2

1なら次月計算式、2なら前月計算式 という形でスクリプト引数で分岐して
一つのスクリプト内で出来ると思ってたのですが、
計算式をどうすれば良いのか?解らず困っております。

FMの勉強を始めた初心者なのですが、計算式がちんぷんかんぷんで
可能ならば、答えとなぜそれで出来るのか?お教え頂けますと助かります。

#2 2014-05-28 23:08:59

Shin
Member

Re: 日付の次月・前月

次月ボタンにスクリプト引数:1
前月ボタンにスクリプト引数:-1
としましょう。その方が自然でしょ。

次の式でOKデス。
Date ( Month ( 日付フィールド ) + Get ( スクリプト引数 ) ; Day ( 日付フィールド ) ; Year ( 日付フィールド ) )
しかも、スクリプト引数に任意の数字を入れると、123ヶ月後、45ヶ月前などもそのまま計算できますので、引数を12にすれば次年、-12にすれば前年になります。

Date ( 13 ; 1 ; 2014 ) 、Date ( 0 ; 1 ; 2014 ) は、それぞれ、2015/1/1、2013/12/1 に変換され返されます。便利な関数です。

ただし、日が29以降のとき、月によってずれが生じますが、それは同処理する規則ですか。(例えば、2014/1/31 の1月後は、2014/2/31 は無いので、2014/3/3 になってしまいます)

Last edited by Shin (2014-05-28 23:18:09)

Offline

#3 2014-06-02 11:49:10

なみ
Guest

Re: 日付の次月・前月

Shin様、遅くなりました。
DATE関数や日付に関する関数の使い道がしたことなかったので、大変勉強になりました。ありがとうございます。

>>ただし、日が29以降のとき、月によってずれが生じますが、それは同処理する規則ですか。(例えば、2014/1/31 の1月後は、2014/2/31 は無いので、2014/3/3 になってしまいます)

今回処理している日付フィールド(グローバル)は、2014/06/01 のように
1日以外の数字は入らない形です。
その為、1ヶ月後も問題ないのかな?と思うのですが、いかがでしょうか?

また質問で申し訳ないですが、
・2014/1/31 の1月後は2014/2/31 は無いので2014/3/3となるが
・規則:1ヶ月後は、1/31の一ヶ月後は、2/28:つまり翌月末としたい

この場合、以下のような考え方で行った所上手く行きましたが、
上記値を出す場合、どのような形がベストなのでしょうか?

if (
Date ( 1; Day ( 日付フィールド ) ; Year ( 日付フィールド ) ) > Date ( 1; 28; Year ( 日付フィールド ) );
Date ( Month ( 日付フィールド ) + 2 ; 0; Year ( 日付フィールド ) );
Date ( Month ( 日付フィールド ) + Get ( スクリプト引数 ) ; Day ( 日付フィールド ) ; Year ( 日付フィールド ) )
)

#4 2014-06-02 12:37:14

Hiro
Member

Re: 日付の次月・前月

条件をより広範事例で適用できる汎用化式、

Let([
  #y=Year(日付フィールド);
  #m=Month(日付フィールド)+Get(スクリプト引数);
  #d=Day(日付フィールド)
];
  Min(Date(#m;#d;#y);Date(#m+1;0;#y))
)

Offline

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

Board footer

Powered by FluxBB
Modified by Visman

[ Generated in 0.006 seconds, 7 queries executed - Memory usage: 510.72 KiB (Peak: 517.83 KiB) ]