2022/10/31追記:Power AutomateにdateDifference関数が実装されたのでこの記事は不要になりました。
Power Automate 日付の差分を求める関数「dateDifferenece」が実装されていたので使ってみた
以前この記事でPower AutomateにはDateDiff機能が存在しないと紹介したけれど、いつの間にかしれっと実装されていたので実際に使ってみた。Power AutomateにDateDiffが実装されている!いつの間にかPower ...
以下旧記事ー--
Power AutomateにはDateDiff関数が用意されておらず、たまに困ることがある。
前回の記事でDateDiff関数の代わりになる方法を探してみたけど、経過日数を求める方法だけ微妙にうまくいかなかった。
そこで今回DateDiff関数の代わりに経過日数を算出する関数(子フロー)を作ってみた。
参考にしたページ
今回はこちらのページを参考にさせて頂きました。
経過日数の計算
概要2つの日付(例えば、自分の誕生日と今日)の間の経過日数を求めたくなったとします。ぱっとは出てきませんね。原因は主に、毎月の日数がばらばらなのと、うるう年のせいなんですが。まあ、2つの日付の差というとち…
こちらのサイトではグレゴリウス暦1年1月1日を基準にして経過日数を求める計算式をとても丁寧に解説してくださっています。
その計算式を参考にさせて頂いて「開始日」と「終了日」の1/1/1からの経過日数を計算、それらの差分を求めればDateDiff関数の代わりになるだろう!的な試み。
子フローの実装
まずは経過日数を求める子フローを実装。
全体像はこんな感じで、見ての通り計算は参考サイトと全く一緒。
各アクションについて簡単に解説していく。
トリガー
トリガーは「年」「月」「日」を受け取るだけの単純なもの。
変数定義
今回使用する変数は7つ。
まず受け取った「年」「月」「日」を変数に格納。
その他に計算に使用する変数を4つ。
計算部分
最初の分岐はこんな感じで、それぞれ「変数を減らす」「変数を増やす」アクションを使用。
続いてメインの計算部分。
各式はそれぞれこんな感じ。
dy = 365 * ( y – 1 );
mul(365, sub(variables('year'), 1))
c = y / 100;
div(variables('year'), 100)
dl = (y / 4) – c + (c / 4);
add(sub(div(variables('year'), 4), variables('c')),div(variables('c'),4))
dm = (m * 979 – 1033) / 32;
div(sub(mul(variables('month'),979),1033),32)
return dy + dl + dm + d – 1;
sub(add(add(add(variables('dy'),variables('dl')),variables('dm')),variables('day')),1)
これで経過日数を求める子フローは完成!!
検証
こんな感じの適当な親フローを作って、「基準日」「終了日」それぞれの経過日数の差分を変数diffに入れてみる。
翌日
まずは翌日。これを実行すると、
結果は1。
昨日
続いて昨日。これを実行すると、
結果は-1。
翌月
ちょうど計算が難しい2月なので翌月を計算。
結果は28。ばっちり!
うるう年
最後にうるう年の計算。直近の2020/1/1を基準にして計算すると、
結果は366日。完璧!
ということで、どうしてもDateDiff関数が必要になったら作っちゃうこともできるよ、というお話しでした。
一回作れば使いまわしもできるしね~。
こちらの計算式を編み出していただいた方に多大な感謝!
おまけ:自分の年齢を日付にしてみる
興味本位で自分の誕生日を計算してみると、
12601日!
けっこうな日数生きてるな~と再確認w
人生って長いw
コメント