【Power Automate】期限を毎月固定日にする式|startOfMonth+addDays

Power Automateで期限を毎月固定日にする式(startOfMonth+addDays)を解説する記事の画像 Power Automate

Power Automateでタスクを自動作成するとき、期限を「毎月の決まった日」にしたい場面がありました。たとえば「当月の25日を期限にする」といった指定です。

このとき、実行した日を基準に日付を足すやり方だと、フローが動く日によって期限がズレてしまいます。そこで、月の初日を起点にする startOfMonth から addDays で日数を足す形で実装しました。

この記事でわかること

  • 実行日に左右されず「毎月の固定日(例:25日)」を期限にする式が分かる
  • startOfMonth とaddDays の使い方が分かる

完成イメージ(当月25日が入ったPlannerの期限)

先に、式を確認しておきます。「当月の25日」を期限にする式です。

formatDateTime(addDays(startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time')),24),'yyyy-MM-dd')
// 当月25日を yyyy-MM-dd 形式で返す(起点=今月1日 + 24日)

この式をPlannerの「タスクの作成」アクションの期限フィールドに入れると、実行した日がいつであっても、その月の25日が期限として入ります。

期限欄に当月25日が入ったPlannerタスクの画面

やっていることは、内側から順に3段階です。

  1. 協定世界時の現在の日時をターゲットタイムゾーン(Tokyo Standard Time)に変換し、その日時から月の初日を取り出す
  2. 月の初日に対して日数を足す
  3. 最後に、日付の文字列(yyyy-MM-dd)に整える

という流れです。一番外側の要素から見ると分かりにくいので、以降の章で内側から順に組み立てていきます。

utcNow() 起点だと実行日でズレる

最初に私が組んだのは、utcNow()(協定世界時で現在の日時を返す関数)を起点にして日を足す形でした。

現在の日時を起点にすると、その基準は「フローが実行された日」になります。今日が5日なら5日を基準に、20日なら20日を基準に計算されます。つまり「当月の25日」を狙って日数を足しても、実行した日によって結果が変わってしまいます。

期限にしたいのは「その月の何日」という固定の日付で、フローがいつ動いたかは関係ありません。ここで必要なのは、実行日に左右されない起点でした。それが、月の初日を返す startOfMonth です。

実行日に依存する utcNow() 起点をやめて、startOfMonth を起点にしました。

実行日に左右されない期限の式を組む

ここからは、完成式を内側から順に組み立てます。使う関数は3つです。

Step1|startOfMonthで「今月の1日」を起点にする

まず、実行日に左右されない起点を作ります。startOfMonth(指定した日時の「その月の初日」を返す関数)を使います。

startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time'))
// 今月の1日を起点にする(日本時間に変換してから月初を取る)

utcNow() はそのままだとUTC(協定世界時)の日時を返すため、日本時間との差で月初の判定がずれる可能性があります。そこで convertFromUtc(…,’Tokyo Standard Time’) で日本時間に変換してから startOfMonth に渡しています。

これで、フローが何日に動いても、起点は必ずその月の1日に定まります。

Step2|addDaysで◯日分ずらす

起点が「今月の1日」なので、そこから日数を足して目的の日にします。addDays(指定した日数を足す関数)を使います。

25日にしたいときは、1日を起点にして24日を足します。起点がすでに1日分なので、足すのは「目的の日 − 1」という数え方です。

addDays(startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time')),24)
// 今月1日 + 24日 = 今月25日

日付を変えたいときは、この 24 の部分だけを差し替えます。10日にしたいなら 9、16日にしたいなら 15 です。

Step3|formatDateTimeで日付の形に整える

最後に、Plannerの期限フィールドに渡せる形へ整えます。formatDateTime(日時を指定した書式の文字列にする関数)で yyyy-MM-dd の形にします。

formatDateTime(addDays(startOfMonth(convertFromUtc(utcNow(),'Tokyo Standard Time')),24),'yyyy-MM-dd')
// 2026-07-25 のような日付文字列にする

これで完成式になりました。Plannerの「タスクの作成」アクションの期限フィールドに、この式をそのまま入れます。

Plannerの「タスクの作成」アクションの期限フィールドに式を入れている画像

まとめ

「当月の◯日」を期限にする式を、実行日に左右されない形で組みました。今回のポイントは次の2つです。

  • 起点を utcNow() ではなく startOfMonth にすると、実行日に左右されず「その月の初日」から数えられる
  • addDays で「目的の日 − 1」を足す(1日が起点のため)。日付を変えたいときはこの数字だけ差し替える

日付計算は最初つまずきやすいところですが、起点さえ固定できれば読みやすい式になります。Power Platformを触り始めたばかりの方に向けて、こういった詰まりポイントをこれからも発信していきます。よかったらブログをブックマークして、またのぞきに来てください。

あわせて読みたい

この期限式は、Plannerにタスクを自動で配る一連のフローの一部として使っているものです。フロー全体の作り方や、毎サイクルで作り直す仕組みは次の記事にまとめています。

【Power Automate】Plannerに1人1タスクを自動配布する|バケット振り分け方法
Power AutomateでSharePointの名簿からPlannerのタスクを1人1つ自動作成する手順をまとめました。バケットのGUIDの控え方、Switchによる課別の振り分け、変数の初期化、100件で打ち切られないための改ページ設定まで解説します。
【Power Automate】Plannerのタスクを一括削除する|毎サイクル作り直すフローの組み方
Power AutomateでPlannerのタスクを一括削除するフローの組み方を解説します。ListTasksからループで1件ずつ削除する3点セットの作り方、標準コネクタでIf-Match(ETag)欄が出ないときの考え方、削除ループの遅延設定までまとめます。

コメント

タイトルとURLをコピーしました