こんにちは、そのべです。
前回は、PowerAppsの練習として出退勤管理アプリを作成してみました。
こちらでコードには問題ありませんが、PowerAppsではデバイスによって日付トラブルが発生しています。
今回は、PowerAppsでの日付トラブルの解消方法とPowerAppsでの日付管理方法のまとめを紹介いたします。
PowerAppsでの日付トラブルとは
私のいう日付トラブルとはどういうものをいうかというと日時が日本時間とずれるという現象です。
PowerAppsで構文を入力しているとき、Today()は、現在だったら、“2022/3/7 “ってなりますよってでてきるんですが、この時は、ちゃんと現在日時とあっているんです。
そして、このままPCでアプリを起動して、出勤打刻してみます。
2022年3月7日になるように期待を込めて、社員番号を20220307として打刻してみましょう!
打刻後に台帳をみていますと、
2022/3/6 15:00 ??
これはどこの時間や!?となるわけです。
おそらく、現在の日付を2022/3/7 00:00:00と取得して、そのあと9時間前にしているということは、
世界標準時間のグリニッジ標準時に変換していることが推測されます。
(そういえば人生で一回は、グリニッジ天文台いってみたいなぁー)※余談です(笑)
これが私を困らせたPowerAppsの日付の問題です。
おそらく、デバイスの環境設定で日本が設定されてないだけかなと安直な考えで設定画面を見ました。
しっかり日本になってるやん!ってなったわけです。
それもそのはずですよね、日本の日付をわざわざ、2022/3/7 00:00:00 として取得しているし(笑)
初めから、世界標準時取得してたら、2022/3/6 00:00:00となるわけですから。
日本の時間を取得して、いちいち世界標準時に変換するお節介な操作を失くすためにはと調べましたが、これに関する記事は見つかりませんでした。
ちなみに、会社でもPowerAppsでアプリを作成して業務改善してますが、Now()はしっかりローカル時間で取得し入力してくれます。
しかし、時刻の情報がいらないからToday()関数を使ったときは同じ現象が生じます。
PowerAppsの公式ページには、下記のようにNow()もToday()もローカル時間を取得と記載あるんですけどね。
PowerAppsでの日付トラブルの解消法
なんていうお節介なんだと色々ためしましたが根本的な解決には至りませんでした。
一応、後付け対策としては解決できたので紹介いたします。
解決法としては、PowerAppsが世界標準時間に変換するお節介操作をやること事前に予期しておき、Today()関数で取得した日時に9時間をDateAdd関数を使って足しておく方法です。
OnSelectのところに次の構文を入れます。
Patch(出勤テーブル,{number:Text(Input_number),name:Text(Input_name),time1:DateAdd(Today(),9,Hours)})
このようにPowerAppsには、日付処理の関数が複数用意されています。
後述で便利な日付操作に使う関数を記載しておきます。
この解決法で、Today()で取得した2022/3/7 00:00:00 に9時間たして、
2022/3/7 09:00:00に変換し、これにお節介操作で9時間引かれて
2022/3/7 00:00:00になるということです!
なんとも非効率な操作で気に食わないですが、ひとまずこれで応急処置としておきます。
もし、根本的な解決策ご存知の方いたら問い合わせコメントで教えていただけると助かります。
それでは、この解決法で解決できているか念のため確認しておきましょう。
先ほどと同じようにして、名前を “そのべ2” として打刻します!
そして台帳の方を確認してみると、
はい!ちゃんと2022/3/7として記録できていますね!
PowerAppsでの日付関数 一覧
PowerAppsでの日付取得方法は、下記2つが王道です。
- Today():日にちの情報だけ欲しい時(時刻は不要)
- Now():日時情報が欲しい時
これらは、公式ページでローカル時間を取得と記載されています。
これが正常に機能しなかったのが今回の問題なんですけどね...
世界標準時刻を取得する関数も用意されています。
- UTCToday():日にちの情報だけ欲しい時(時刻は不要)※世界標準時
- UTCNow():日時情報が欲しい時 ※世界標準時
続いて、日付けの処理で使う関数がこちらです。
- DateAdd(日時、単位、数字):日時に数字(単位)を足した結果を返します。
- DateDiff(開始時、終了時、単位):終了時から開始時を引き、差を返します。
書式変更に使う関数がこちらです。
- Text(日時,”yyyy年mm月d日”):日時を””内の任意の書式に変換可能。
- DateValue(“”):テキスト型を日付型に変換するのに使用。
書式変更を使う理由としては、人間が分かりやすいように書式を変換したいことや、台帳の列で設定しているデータ型にあわせて入力することがあります。
簡単に言えば、人間がわかるように書式変更、機械がわかるように書式変更する必要がでてくるためです。
以上の操作方法が分かっていれば、大体の日付操作はできると思います。
QR管理アプリ作成編で、今回紹介した一部の関数を実際に使用しておりますので参考にしてください。
★そのべ オススメ書籍★
ひと目でわかるPower Apps ローコードで作成するビジネスアプリ入門 改訂新版 [ 株式会社イルミネート・ジャパン 奥田 理恵 ] 価格:3,300円(税込、送料無料) (2024/4/30時点) 楽天で購入 |
コメント