kintoneの日付計算をマスターして使いこなそう!

バンブロをご覧いただきまして、誠にありがとございます!

テクバンのITたまごぐみです!

本日はkintone日付計算について紹介します。

日付計算ってなに?どうやって設定するの?

締め切り日の項目を開始日から10日後に設定したいけど、月をまたぐと計算するのが面倒…!
工数の合計を自動で計算してくれる方法ないかな…?

こんなお悩みには日付計算を使って解決!

計算フィールドでは単純な数字の計算だけではなく、日付計算までできちゃうんです!

さらにさらに、文字列(1行)フィールドでも日付計算を使えるんです!!!

 

それでは早速、設定方法を見ていきましょう!

 

設定のコツ

kintoneでは、日付、時刻、日時のフィールドの値はUNIX時刻として扱われるため、日付や日時は秒単位で扱い、計算式も秒単位で指定します。

UNIX時刻を詳しく知りたい方は、kintoneのサイトに分かりやすい解説が載っているので読んでみてください。

https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/date_format.html#autocalc_date_format_40

 

重要なのは日付や日時を秒単位で扱い、計算式も秒単位で行うということ。

このコツを抑えることで、日付計算のハードルがぐっと下がりますよ!

 

計算フィールドを使った設定方法の一例

 開始日終了日から工数を算出したい!という方にぴったりの一例です。

 

 

「計算」フィールドで以下のとおり設定します。
計算式:(終了日開始日) / (60*60*24)
表示形式:数値
小数点以下の表示桁数:0
単位記号:日([後ろに付ける]を選択)

 

 

計算式で設定している60*60*24って何の数字?と思った方、

これこそUNIX時刻のことです!

60*60*24で割らないとどうなるかというと、こうなります。

 

 

すごい数の工数になってしまいましたね…でも、これの単位は「」なんです。

計算してみると777600秒=12960分=216時間=9日となります。

単位「」を「」に直すために60(秒)×60(分)×24(時間)終了日開始日から割る必要があるんですね!

 

文字列(1行)フィールドと計算フィールドの使い分け

先ほど計算フィールド文字列(1行)フィールド日付計算ができるとお話ししましたね。

例では計算フィールドを使った方法をご紹介しました。

計算フィールドで日付計算できるなら、文字列(1行)フィールド使わなくていいんじゃない?
文字列(1行)フィールドはどういうときに使うの?

という疑問に対してお答えしていきます!

 

計算フィールドですが以下の設定画面からわかる通り、年や日付の区切りに-(ハイフン)を付けることはできます。

しかし、「XXXX年XX月XX日」といった形式は選択できません。

これは計算フィールドが文字列を表示できないためです。

試しにDATE_FORMAT関数(日付の形式の変換などができる関数)を使って「XXXX年XX月XX日」を表示させようとしてもエラーが出てしまいます。

区切りを-(ハイフン)ではなく他の形式にしたいという方や、他の文字列と組み合わせて日付を表示したいという方は、
文字列(1行)フィールドを使いましょう!

 

文字列(1行)フィールドでもUNIX時刻が使用されていることを忘れないでくださいね?

また、文字列(1行)フィールドではDATE_FORMAT関数を使用する必要がある点に注意です!

以下は翌日の日付をDATE_FORMAT関数でYYYY/MM/ddと表示したい場合の例です。

DATE_FORMAT(日付+24*60*60*1, “YYYY/MM/dd”, “Etc/GMT”)

DATE_FORMAT関数には、第1引数(フィールドコード)第2引数(日時の形式)第3引数(タイムゾーン)を指定します。

 

詳しい設定の仕方や、他の日付形式を知りたい方は以下のkintone公式サイトの説明をご覧ください。

https://jp.cybozu.help/k/ja/user/app_settings/form/autocalc/date_format.html#autocalc_date_format_40

 

計算結果がおかしい場合のトラブルシューティング

最後に、日付計算に挑戦してみたけどうまくいかなかった…という方へ、考えられる原因を紹介していきます。

当てはまっているものがあるかどうか確認してみましょう!

 

時間を秒単位で指定しているか?

先ほどから説明しているように、kintoneではUNIX時刻日付計算を行っています。

もう一度時間を秒単位でしているか、計算式が秒単位で設定されているかを確認してみてください!

 

日付フィールド、または時刻フィールドを参照しているタイムゾーンが”Etc/GMT”になっているか?

こちらは文字列(1行フィールド)を使用している方向けになります。

なぜか計算結果が期待通りのものにならない…という状況の時に見られる原因の一つです。

 

日付フィールド、または時刻フィールドのタイムゾーンは、協定世界時で固定となっています。

これらのフィールドを計算式に使用する場合は、協定世界時のタイムゾーンID「Etc/GMT」を指定します

ここは東京だから~と思ってAsia/Tokyoタイムゾーンを指定すると、計算結果が期待どおりになりません

では、タイムゾーンに「大阪、札幌、東京」(Asia/Tokyo)を設定するとどうなってしまうか見てみましょう。

 

誤ったタイムゾーンの計算式:
会議名&”-” &DATE_FORMAT(時刻,”HH:mm”,”Asia/Tokyo“)

時刻に15:00を指定しているにも関わらず、00:00と表示されてしまいました…

協定世界時のタイムゾーンID「Etc/GMT」を指定することで、正しい時刻が表示されます。

正しいタイムゾーンの計算式:
会議名&”-” &DATE_FORMAT(時刻,”HH:mm”,“Etc/GMT”)

今度は正しい時刻が表示されました!

 

日時フィールドを指定している場合は、逆にAsia/Tokyoを指定してくださいね~

日時フィールドを参照している場合の正しいタイムゾーンの計算式:
案件名&”-” &DATE_FORMAT(開始日時,”YYYY/MM/dd HH:mm”,”Asia/Tokyo“)

 

DATE_FORMAT関数で参照している日付フィールドが空欄か?

こちらも文字列(1行)フィールドで起きるエラーの例になります。

実はDATE_FORMAT関数で参照している日付フィールドが空欄の場合、文字列(1行)フィールドには、1970-01-01が表示されてしまいます…

 

回避する方法は以下の2つです。

  • 日付フィールドの初期値を設定する
  • 文字列(1行)フィールドにIF関数の計算式を設定する

 

日付フィールドが空欄のはずなのに、日付計算で1970-01-01が表示されてしまう場合は上記の設定を試してみてください!

 

年齢計算をしているか?

最後によく引っかかる原因をご紹介します。

それは…

年齢の計算をしようとしているか?

です。

日付計算ができるんだから、年齢だって計算できるよね?そうだ、更新日時フィールドを使って…あれ、できない

そうなんです!

kintoneの日付計算で年齢を計算するには、少しコツがいります!

 

日付計算フィールドに生年月日を用意するところまでは、今までの記事を読んでいればわかると思います。

では今日の日付を何のフィールドで用意するか

入力が面倒だからという理由で更新日時フィールドを使うと、年齢計算は失敗しています

必ず、日付フィールドで日付を入力しましょう!

 

年齢を算出するための計算フィールドの設定は以下になります。

計算式:(本日日付生年月日)/(60*60*24*365)
表示形式:数値
小数点以下の表示桁数:0

60*60*24は今まで何回も出てきたUNIX時刻での日付を出す計算方法ですね!今回は年を算出する必要があるので、さらに365を掛けています。

 

 

年齢を算出することができました!

ただしこの方法、いくつか問題を抱えています…以下を確認して使ってみてくださいね!

  • 前述したとおり更新日時フィールドを使わないため、本日日付のフィールドを更新しないと年齢は更新されません。
    自動で年齢や本日日付が変わらないため、最新の情報を知りたいという場合はメンテナンスが面倒なことに…
    アンケートを提出した時点の年齢など、固定した情報を入力する分には問題ないですね。
  • この方法では1年を365日として計算しているため、うるう年が入るとだんだんずれていきます
    本日日付と年齢の差が大きければ大きいほど、年齢が正しく出ないことが増えていきます…

 

こちらがうるう年が入ったことにより年齢がずれてしまった例。

この場合、正確には1歳が正しいですね。

 

 

正確な年齢計算を実現するには、Javascriptをつかってアプリをカスタマイズする必要があります!

 

 

最後までご覧いただきありがとうございました!
またお会いしましょう~!