Power Apps の日時操作のまとめ
2021-05-31
azblob://2022/11/11/eyecatch/2021-05-31-datetime-operations-in-power-apps-000.jpg

こんにちは、毛利 真士です。

この記事は Power Apps における日時に関する操作のまとめです。

Power Apps で ~という日時の処理をしたい! というときにどうぞ

0. はじめに

この記事では「日付」が年月日、「時刻」が時分秒、「日時」が日付と時刻を合わせたものを表すとします。

公式ドキュメント的にはDate型(日付用)とTime型(時刻用)とDateTime型(日時用)があるということになっていますが、全部DateTime型だと思っておけばいいと思います。

1. 今日の日付や現在の日時を知りたい

Now関数、Today関数 を使います。

今日の日付を得る(時刻部分は0時0分0秒)

Today()

現在の日時を得る (時刻部分も含む)

Now()

2. ある日時が何年か知りたい、何時か知りたい、何曜日か知りたいなど

Year関数、Month関数、Day関数、Hour関数、Minute関数、Second関数、Weekday関数 を使います。

関数意味
Year日時の年を得ますYear(Now())
Month日時の月を得ますMonth(Now())
Day日時の日を得ますDay(Now())
Hour日時の時を得ますHour(Now())
Minute日時の分を得ますMinute(Now())
Second日時の秒を得ますSecond(Now())
Weekday日時の曜日を得ます(日曜日: 1, 月曜日: 2, ...)Weekday(Now())

3. ある日時が今日かどうかを判定したい / 今日がある日付かを判定したい

IsToday関数 を使います。

例: 今日が2021年5月27日かどうかを判定

IsToday(Date(2021, 5, 27))

4. 文字列を日時にしたい

DateValue関数、TimeValue関数、DateTimeValue関数 を使います。

省略可能な第二引数を使うと、指定した地域の書式に対応できます(詳細はリンク先)。

例: 文字列"2021/05/27"から日付への変換

DateValue("2021/05/27")

例: 文字列"10:20:30"から時刻への変換

TimeValue("10:20:30")

例: 文字列"2021/05/27 10:20:30"から日時への変換

DateTimeValue("2021/05/27 10:20:30")

5. 日時を文字列にしたい

Text関数 を使います。

以下の説明では現在時刻を文字列にする例を示します。現在時刻以外の日付を文字列にしたいときはNow()の部分を変えてください。

日時の日付を"~年~月~日"などの形式の文字列にする

例: "2021年05月03日" (第二引数のyyyyが最低4桁の年に、mmが最低2桁の月に、ddが最低2桁の日に置き換えられます)

Text(Now(), "yyyy年mm月dd日")

例: "2021年5月3日" (第二引数のyyyyが最低4桁の年に、mが最低1桁の月に、dが最低1桁の日に置き換えられます)

Text(Now(), "yyyy年m月d日")

例: "2021-05-03" (第二引数のyyyyが最低4桁の年に、mmが最低2桁の月に、ddが最低2桁の日に置き換えられます)

Text(Now(), "yyyy-mm-dd")

日時の時刻を"~時~分~秒"などの形式の文字列にする

注意: mmmが月にも分にも使われますが、これらの区別は、h,hhが直前で使われているか、s,ssが直後で使われている場合に分だと認識され、それ以外の場合は月と認識されます。

例: "01時02分03秒" (第二引数のhhが最低2桁の時に、mmが最低2桁の分に、ssが最低2桁の秒に置き換えられます)

Text(Now(), "hh時mm分ss秒")

例: "1時2分3秒" (第二引数のh最低1桁の時に、m最低1桁の分に、s最低1桁の秒に置き換えられます)

Text(Now(), "h時m分s秒")

例: "3分" (分だけほしいとき)

分だけほしい場合は書式指定できないのでMinuteを使います。

Text(Minute(Now()), "#分")

例: "03分" (分だけほしいとき)

Text(Minute(Now()), "#00分")

日時を"~年~月~日 ~時~分~秒"などの形式の文字列にする

例: "2021年05月03日 10時20分30秒" (yyyyなどの意味は上記参照)

Text(Now(), "yyyy年mm月dd日 hh時mm分ss秒")

6. 数値を指定して日時を作りたい

Date関数とTime関数 を使います。

例: 2021年5月27日を表す値を作るとき (日時は0時0分0秒)

Date(2021, 5, 27)

例: 10時20分30秒を表す値を作るとき (日付の情報はなし)

Time(10, 20, 30)

例: 2021年5月27日10時20分30秒を表す値を作るとき

なぜか関数がないのでテキスト経由で作る

DateTimeValue(Text(Date(2021, 5, 27)) & " " & Text(Time(10, 20, 30)))

7. 日時を翌日にしたい、2時間後にしたい、30分前にしたい、など

DateAdd関数 を使います。

第三引数で加算・減算の単位を指定できます。省略した場合はDays(日単位)です。

例: 翌日にする

DateAdd(Now(), 1, Days)

例: 2時間後にする

DateAdd(Now(), 2, Hours)

例: 30分前にする

DateAdd(Now(), -30, Minutes)

第三引数で指定する単位の一覧 (省略時はDays(日))

第三引数単位
Years
Quarters四半期
Months
Days
Hours
Minutes
Seconds
Millisecondsミリ秒

8. 2つの日時の時間差を計算したい

DateDiff関数 を使います。

第一引数の日時にどれだけ足すと第二引数の日時になるか? が得られます。

単位は7. のDateAdd関数と同じです

例: 2021年4月1日から2021年5月30日までの日数 = 59日

DateDiff(Date(2021, 4, 1), Date(2021, 5, 30), Days)

例: 2022年4月1日から2021年4月1日までの年単位の差分 = -1年

DateDiff(Date(2022, 4, 1), Date(2021, 4, 1), Years)

例: 13:00:00から15:30:00までの時間単位(分・秒は無視される)の差分 = 2時間

DateDiff(Time(13, 0, 0), Time(15, 30, 0), Hours)

例: 13:00:00から15:30:00までの分単位の差分 = 150分

DateDiff(Time(13, 0, 0), Time(15, 30, 0), Minutes)

例: 13:00:00から15:30:00までの分単位の差分(時間) = 2.5時間

DateDiff(Time(13, 0, 0), Time(15, 30, 0), Minutes) / 60

9. 2つの日時が同じ日付かどうかを判定したい

datetime1datetime2は日時を持つ変数などとします。

例: 日時datetime1と日時datetime2が同じ日付かどうか

Text(datetime1, "yyyymmdd") = Text(datetime2, "yyyymmdd")

例: datetime1の日付が2021年5月27日かどうか

Text(datetime1, "yyyymmdd") = Text(Date(2021, 5, 27), "yyyymmdd")

10. ある日付の年がうるう年かどうか

datetimeが日時を表す変数だとします。

(Mod(Year(datetime), 4) = 0 && Mod(Year(datetime), 100) <> 0) || Mod(Year(datetime), 400) = 0 

11. 入力-日付の選択 で選択された日付を得たい

SelectedDateで選択されている日付を得られます。

例: 名前がDatePicker1の「日付の選択」で選択されている日付を得る

DatePicker1.SelectedDate

12. まとめ

思ったより日付操作の関数多いですね。


【DX人材を育成する新サービスのご案内】

このたび、ノーコード・ローコード開発に興味のある方に向けて、Power Platformを活用した「クラウドアプリ開発実践講座」をご用意しました!
さっそく、金融機関様などで全社的な研修にご採用をいただいております。
ほぼマウス操作だけでアプリが作れてしまう時代。プログラミング未経験の方でも、社内業務の自動化やデータ可視化ツールの開発をリードできるようになります。
いまならお試し60分無料体験講座を開催中です!ぜひお試しください☆

クラウドアプリ開発実践講座
https://sales.fixer.co.jp/dx-training