6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

【FileMaker】経過年月日を求める

Posted at

どの言語でもそうですが、日付計算は頭を使うことが多く、一回共通でスクリプトを書いたら、二度とそのスクリプトの中身を思い出せなかったりします。
また、練習問題で日付計算をたくさんやった、という方もいらっしゃるかもしれないですね。

そして、今回も「生後」を求める計算を実装したので、覚え書きとして記事にしておきます。

要は、開始と終了の「月」と「日」に注目する、ということです。
開始年月日の月日よりも終了年月日の月日が後の月(例:開始月8月、終了月9月)だった場合や、開始日が終了日よりも後の日(例:開始日10日、終了日1日)をスクリプトに重点的に組み込むのです。

サンプル

いくつかの経過年月日のサンプルを以下に示します。
※from日付:開始年月日、to日付:終了年月日です。

月条件 日条件 結果
from月 > to月 from日 > to日 filemaker_ymd1.png
from月 > to月 from日 < to日 filemaker_ymd5.png
from月 < to月 from日 < to日 filemaker_ymd2.png
from月 < to月 from日 > to日 filemaker_ymd6.png
from月 = to月 from日 < to日 filemaker_ymd7.png

今回のサンプルでは、from日付当日は含んでいません。
もし、from当日も含む場合(9/10〜9/11を2日間と計算する場合)は、この経過年月日の日付に1日追加すればいいことになります。
また、from日付とto日付が反対に入っていた場合などのチェックは、フィールドのチェックかスクリプトなどで入れると、さらに確実になります。

計算式

計算式は、次のようになります。
filemaker_ymd8.png

(1)年数、月数、日数を求める準備
月数と日数の場合、先に示したように、fromの方が値が大きかった場合は、意図的に-1(前月)をしてそれぞれの計算で月数を調整します。

(2)fromからtoまでの月数を求め、年数と月数を求める
月数を求める時は、(1)で出した調整分を加味します。

(3)年月よりも多かった分の日数を求める
to日付からfrom日付を引くのですが、そのまま引くと年月も含めた日数になってしまうので、引かれる側をto日付の年月に合わせて(日は、from日付のまま)減算をします。
この時も、(1)で求めた日の調整分を加味し、from日付の月 > to日付の月という場合には前月からの日数にして計算をします。

実装場所

今回は、テーブルの「経過年月日」という計算フィールドに実装しました。
共通部品として切り出す場合は、カスタム関数にすると便利です。

まとめ

経過年月日は、他にも計算方法があると思いますが、今回の計算方法は、割と紙とペンで計算する方法に近いものになっています。
一つの方法として、その他のやり方も探して実装し、どれが効率的か、どれがメンテナンスが楽か、などを見極めて本番へ持っていってくださいね。

6
7
5

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?