記事投稿時点(2019/2/11)の仕様なので、今後VerUpにより改善されると思われますが・・・。おや?ってなったので投稿しておきます。
#Now() → 年/月/日(曜日)ってしたいでしょ?
日付のデータを画面表示する際、曜日まで含んだ形式にしたい場合があると思います。そんな時に利用するのが「Text関数」です。
■参考URL
PowerApps の Text 関数
ddd 省略形で曜日を表示します (Sun ~ Sat)。
dddd 完全な名前で曜日を表示します (Sunday ~ Saturday)。
なるほど。では、日~月、みたいな省略形は”ddd”かな?と思いますよね?
※ちなみに、C#使いの方は”yyyy/MM/dd”ってしちゃうと思うのですが、上記参考URLの公式でプレースホルダーをよくご確認ください。色々と方言の違いがあります注意です。
#日本語環境におけるText関数の曜日
さて、どうなるか?画面を確認ください。
####①の箇所 m/dd(dddd)
Text(Now(), "[$-ja-JP] m/dd(dddd)", "ja-JP" )
####②の箇所 m/dd(ddd)
Text(Now(), "[$-ja-JP] m/dd(ddd)", "ja-JP" )
”dddd”でも、”ddd”でも、”月曜日”となってしまいます。
”月”とはなりません。
どうやら現状の仕様では、日本語環境における曜日については、省略された形式は表示されないようです。では、③のように省略した形式にしたい場合は、どうすればよいか?
####③の箇所 ”曜日”の文字列をブランク("")で置換
Substitute(Text(Now(), "[$-ja-JP] m/dd(ddd)", "ja-JP" ),"曜日","")
対策としては以上です。念のため、関数を重ねているので解説しておきます。
#解説
③の式は、”ddd”で指定した省略された形式(でも、日本語環境だと省略されてこない)を指定したText関数の結果を、さらにSubstitute関数で”曜日”という文字列をブランク("")で文字列置換しています。
これにより、現時点の仕様で”〇曜日”となってしまっても、”〇”(日~土)と表示されます。また、”ddd”を指定しておくことにより、将来的に日本語環境でも省略形になるよう更新が入った場合でも、出力される結果は変わらないハズです。なので、修正をし忘れても大丈夫。(きっとねw)
ここでもC#使いは、C#のReplace関数を思い浮かべるかと思いますが、それに該当する機能がPowerAppsではSubstitute関数です。PowerApps の Replace関数C#と挙動が異なりますのでご注意ください。(自分は今でもなれなくて、アレ?ってなるw)
■参考URL
PowerApps の Replace および Substitute 関数
#まとめ
- 日付型のデータから曜日が取得したい場合はText関数で"dddd"、または"ddd"
- "ddd"が省略型 (Sun ~ Sat)
- "dddd"が完全な名前 (Sunday ~ Saturday)
- 日本語(ja-JP)の場合、"ddd"でも"dddd"でも結果が同じ”〇曜日”になる
- "曜日"の文字列が不要な場合は、文字列置換「Substitute関数」を活用
やーしかし、”月曜日”の省略型は”月”だと思うじゃん?まさかね、不具あ・・・じゃない仕様だとは思わないじゃん?みたいな気持ちになりましたとさ。
VerUpで当記事の動きは改善されると思います。どちらかというと、文字列置換をすぐ「Replace」で書いて、アレ?ってなるので、その備忘録も兼ねたネタでした。いや、ほんとね。PowerApps の 関数は、C#で準備されてるモノと同音異義語みたいな感じで、動作やらが異なるポイントが多いですね。関数のDocsをチャンと確認して、実際に動作をチェックしないと、どーしようもないトコでハマりかねないですね(苦笑
それでは、皆さま、素晴らしい Power Platform Life を!