Power Automate での月初日と月末日を取得する方法

ごきげんよう、百合宮桜です。
今回はPower Automate における日付に扱い方について書いていきます。
月初は毎月1日と決まっているので簡単ですが、月末は30日の時もあれば、31日の時もある……
2月なんてうるう年かどうかで末尾が変わってくる！！と難しいことばかりですよね。
でも意外と手数少なく取得できます。

2024年09月24日、モダンデザイナーでの方法に変更しました。

# 月初日の取得方法
これは簡単です。
月の1番初めの日は1日と決まっていて、他はありませんから。
タイムゾーンの変換アクションの書式設定文字列をカスタムすればOKです。
実務で使う場合は、スケジュールされたフローでトリガーすることも多いかと思いますが、今回は簡単のために手動トリガーを使用していきます。

1. トリガーを選択し、「入力の追加」をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/2447befe-2548-ccec-30e5-6f7e926ae891.png)

2. 「日付」を選択します。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/08a4de82-c4ab-7fbf-fc02-23c471b14d20.png)


3. 日付入力欄ができました。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/adb23bc3-42ba-7fe2-f49e-e5a47890ed3a.png)


4. ＋ > アクションの追加 をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/0b6576eb-2a01-1109-f1ea-8c65fbf8a11f.png)


5. ランタイムを「組み込み」で絞り込みます。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/a93050e9-c6c7-4005-5735-e3baa18368ae.png)

6. 「Date Time （日時）」を検索、クリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/f37e1f25-c3b8-1aaa-8073-7aa774e8c790.png)


7. タイムゾーンの変換 をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/6cdb58fd-7087-0f74-230a-949b0b2ef2ed.png)

8. Base Time（基準時間） に 動的なコンテンツから トリガーの日付 を入れます。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/939a97aa-567b-b0ee-537c-60a29d61bfe5.png)

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/884b74f9-be31-e857-494a-29d0d7ea4e09.png)

    :::note info
    検索ボックスに「日付」と入力すると検索できます。
    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/9feda671-66fd-09b8-25bd-77b09ebd8b3e.png)

    :::

9. Source Time Zone（変換元のタイムゾーン）を「Coordinated Universal Time」に設定します。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/8f0e365e-2490-47fb-93a2-f78c357069df.png)

10. Destination Time Zone（変換先のタイムゾーン）を「Osaka, Sapporo, Tokyo」に設定します。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/fe7eaba7-5aec-8f6f-1e3d-3d29fd80c3d6.png)
    
11. Time Unit（書式設定文字列）は カスタム値の入力 をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/16bb84cf-b934-b7e0-9e41-f5ba78ca5b45.png)


8. 以下の式を入力します。
    ~~~text
    yyyy/M/01
    ~~~

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/ac182c2f-cef7-4da3-cb23-05fc0a23c735.png)


これでトリガーで指定した日付の月初日が取れます。

## テストで確認しよう。
実際にテストしてみてください。

1. テストボタンをクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/0584f006-51d6-aae0-ccd4-2b872fd76302.png)

2. 手動 ＞テスト をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/41e08c8f-3400-7e36-d1fa-5762bf00c52c.png)

3. トリガーで今日の日付を指定し、フローの実行をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/6c459ebb-5fb6-6e98-4edd-9b882358cfd5.png)

4. 完了 をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/50ff09f4-c42f-75fe-35f2-80c770455220.png)

5. タイムゾーンの変換の出力を確認すると、トリガーで指定した月の1日が出力されていることが分かります。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/acce5f9f-9786-7402-1b0e-b51f43aca869.png)

# 月末日の取得方法
これは
①月初日を取得
②月初日の1か月後を計算
③その1か月後の日の1日前を取得する
という形で取得していきます。
つまり、先の月初日の取得方法のフローにアクションを追加する形で作ります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/d052376e-2be5-ecac-0728-bfcd2bb7ef81.png)

この後↑にアクションを追加していきます。

1. Date Time（日時）コネクタの「時間への追加」をクリックします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/e64d109b-595b-6bcb-f684-fc32928dbe29.png)

2. Base Time（基準時間）に 動的なコンテンツから 先に取得した月初日 を入れます。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/acff91d7-cf34-468b-4d56-db49cf51358b.png)

3. Interval（間隔） を「1」、Time Unit（時間単位）を「Month」にします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/95b299bd-7b8a-ad0a-9ef5-14de2e105dcc.png)

4. Date Time（日時）コネクタから 「時間からの減算」アクションを選択します。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/271aa6a2-261e-9d47-f47c-a5b34e158dde.png)

5. Base Time（基準時間）に 動的なコンテンツから 時間への追加 ＞ Calculated Time（算出時間） を入れます。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/66d9f939-e347-baaf-6f8b-3989c232c95e.png)

6. Interval（間隔） を「1」、Time Unit（時間単位）を「Day（日）」にします。

    ![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/4da1f58f-793b-55f5-9ad8-08c75fe25fef.png)

これで月末日が取得できます。

## テストで確認しよう
先ほどと同じ日付を指定して、確認してみます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/cc5ba909-76fc-a961-7982-59ec2606fcd0.png)

トリガーで指定した月の末日が取得できました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3032705/0141b2fc-04a4-cebf-e99f-716101cf70a5.png)

2月や8月で試してみればわかりますが、末日が何日でも関係なく、取得できます。
便利なのでぜひ覚えてください

# 関数でも同じことができるよ
私は初心者向けにノーコードで書きましたが、関数でカッコよく決めたいよね！派は、ﾍｲｼｬｱりなえもんのポストをご参考にどうぞ！

<blockquote class="twitter-tweet"><p lang="pl" dir="ltr"><a href="https://twitter.com/hashtag/PowerAutomate?src=hash&amp;ref_src=twsrc%5Etfw">#PowerAutomate</a><br><br>月初日<br>startOfMonth(utcNow(),&#39;yyyy-MM-dd&#39;)<br><br>月末日<br>addDays(startOfMonth(getFutureTime(1,&#39;Month&#39;)),-1,&#39;yyyy-MM-dd&#39;)</p>&mdash; りなたむ(Ryota)@ITの町医者👨‍⚕️ (@Rinatamu_ITDR) <a href="https://twitter.com/Rinatamu_ITDR/status/1702238467479220495?ref_src=twsrc%5Etfw">September 14, 2023</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>