7 返信 最新の回答 日時: Oct 25, 2015 9:19 PM ユーザー:user14047

    昭和などの和暦の誕生日から何日経過したか

    アリ スト

      誕生日フィールドに、テキストで、[昭和55年2月22日]などのデータが入っています。明治はいませんが、大正・昭和・平成のデータが存在しています。ここから、西暦に直して、本日が誕生日から何日目なのかを表示するようにしたいのですが、どのように作成すれば良いでしょうか?

        • 1. Re: 昭和などの和暦の誕生日から何日経過したか
          user14047

          和暦から西暦に変換するのは、こんな式で。

           

          Case (
            // 和暦が入力されている時のみ計算
            not IsEmpty ( 和暦日付 ) ;
            GetAsDate (
            Substitute (
              和暦日付 ;
              [ "明治" ; "M" ] ;
              [ "大正" ; "T" ] ;
              [ "昭和" ; "S" ] ;
              [ "平成" ; "H" ] ;
              [ "年" ; "/" ] ;
              [ "月" ; "/" ] ;
              [ "日" ; "" ]
            )
            )
          )
          
          
          

           

          変換した西暦日付から今日まで何日かは、

           

          GetAsNumber ( Get ( 日付 ) - 西暦日付 )
          
          
          

           

          計算結果のタイプは [数字] で、索引オプションで [計算結果を保存せず必要時に再計算する] のチェックを入れてください。

          FileMaker Pro は 年号を使用した日付の入力もサポートされていますが、年号文字は M T S H といった略号になりますので、昭和の文字を S に置き換えて S60/10/25 のような形に置き換えてやれば、日付として認識されますので、それを GetAsDate 関数で型変換してやるだけでいいです。

          参考 : FileMaker Pro ヘルプ : 年号を使用した日付の入力

           

          取得関数を計算フィールドとして使う場合は、索引非保存のチェックをいれてやらないと、計算式を最初に評価した時点での値で固定されてしまいますので、索引非保存のチェックをいれるようにしてください。

          • 2. Re: 昭和などの和暦の誕生日から何日経過したか
            アリ スト
            user14047 様

            ご回答ありがとうございます!

             

            次の計算式では結果おなじですが、GetAsNumberを付ける理由は何かありますか?

            (1)Get(日付)-西暦

            (2)GetAsNumber ( Get ( 日付 ) - 西暦)

            • 3. Re: 昭和などの和暦の誕生日から何日経過したか
              user14047

              確かにこの場合は変わりませんが、値の型を意識する為の癖です。

              比較をする場合とか型が違うと(数字とつもりなのにテキストになっているとか)意図した結果が出なくて嵌ることもあるのでなるべく型を指定するようにしています。

              • 4. Re: 昭和などの和暦の誕生日から何日経過したか
                アリ スト

                • 5. Re: 昭和などの和暦の誕生日から何日経過したか
                  user14047

                  どうせ型変換をかますのであれば、

                  GetAsNumber ( Get ( 日付 ) ) - GetAsNumber ( 西暦日付 )
                  
                  

                  としたほうが、この場合はいいかもしれませんね。
                  Get ( 日付 ) - 西暦日付 の結果は内部的に日付タイプになります。日付は 0001/01/01 が起点ですから、マイナス日付や 0 日ってのがないので、西暦日付に今日や未来日が指定された場合に「?」が返ってきてしまいます。それぞれを最初から数字として計算させたほうがいいのかもと、ふと思ってしまいました。

                  • 6. Re: 昭和などの和暦の誕生日から何日経過したか
                    user19752

                    FM14で

                    Get(日付)-日付タイプフィールド

                    の計算結果をテキストにして試しましたけど、日付の差は数字になります(マイナスも可)。

                     

                    時間の差が時間になる(時刻と時間の区別がない)のと勘違いでは。

                    • 7. Re: 昭和などの和暦の誕生日から何日経過したか
                      user14047

                      あれ?本当だ。

                      計算結果を日付にしておくとマイナス日が表現できないから?になるけど、数字ではとれているので、結果を数字にしておけばちゃんと返ってきますね。

                      すいません。勘違いのうえでの蛇足でした。