以前この記事でPower AutomateにはDateDiff機能が存在しないと紹介したけれど、いつの間にかしれっと実装されていたので実際に使ってみた。
Power AutomateにDateDiffが実装されている!
いつの間にかPower AutomateにPower AppsのDateDiffに当たる関数「dateDifference」が実装されていた。


Power AppsのDateDiffとの違いは戻り値が期間を表す「文字列」として戻ってくることくらいかと。
実際使ってみた
ということで、早速色々使ってみた!
今回は文字列変数「start」と文字列変数「end」に入れた日付の差分をとったので、


変数「diff」に入れるdateDifferenceの式はこんな感じ。
dateDifference(variables('start'),variables('end'))
翌日
まずは簡単に翌日。期間1日を表す文字列が返ってくる。


昨日
続いて昨日。「start > end」の場合は期間がマイナスになって返ってくる。


翌月
続いて翌月。2月で試してみてもきちんと日数「28日」を返してくる。


もちろんうるう年の2月もばっちり「29日」を返してくる。


翌年
最後はうるう年を含めた1年。366日が返ってきているのでばっちり。


日本時間の今日と差分をとりたいとき
今日の日付との差分をとりたいときは「現在の時刻」アクションと「タイムゾーンの変更」アクションを使って求めた日付を、こんな感じでそのまま代入しても、

※式はこんな感じ。

※式はこんな感じ。
dateDifference(body('タイム_ゾーンの変換'),variables('end'))
ちゃんと結果が返ってくるし、


utcNowを使ってこんな感じで直接書いても大丈夫。
dateDifference(addHours(utcNow(),9,'yyyy/MM/dd'),variables('end'))
※式を見てわかるとおり、日付の仕切り記号は「/」でも「-」でもどちらでもいけるっぽい。
日付の差分のみを整数型で取得したいとき
返ってくる日付のみを整数型に変換して計算に使いたい場合は、こんな感じでifとint、splitを使用。
※開始と終了の差分が1日に満たない場合、dateDifferenceの結果は「hh:mm:ss」となるため、ifを利用。
if(contains(dateDifference(【開始】,【終了】), '.'),int(split(dateDifference(【開始】,【終了】), '.')[0]), 0)
整数に変換できて、


マイナスも大丈夫。


ということで日付の差分を求める関数「dateDifference」が実装されて、今までみたいにtick関数を使って差分を求めたり、オリジナルで関数を作らなくてよくなったので日付計算がとても便利になった!
コメント
式を参考にさせてもらいました。
ありがとうございました。
int(split(dateDifference(start,end),’.’)[0])
上記の式だとstartとendの日付けが同じ場合に、intに変換できないエラーが発生しました。
原因は、日付けが同じ場合のdateDifferenceの値が「0.00:00:00」ではなく「00:00:00」になり、
splitで分割できずに出力される値が00:00:00となったためでした。
「作成」アクションでsplit(dateDifference(start,end),’.’)[0]を計算してある前提ですが、
以下のように分岐させてエラー回避しました。
if(contains(outputs(‘作成’), ’00’), 0, int(outputs(‘作成’)))
コメントありがとうございます!
頂きましたご指摘を基に記事を修正しました。