普段システム開発をしているせいか、toC向けのWebサービスの年月の表現にYYYY-MM
とかYYYY/MM
というフォーマットを使ってしまっていたが、その表現はエンドユーザによっては違和感があるということを指摘された
日本人ならまだ2020/01
という表現に馴染みがあるかもしれないが、確かに2020年 1月
という表現の方がよりよい気がするし、英語圏ではJanuary 2020
の方がよさそう
要件として日
はいらないので、下のように年月
の表現だけローカライズさせる方法を調べた
2020年 1月
January 2020
いま moment.js
を使っているのでその中から探してみた
近しい表現 moment().format('LL')
はあったのだが、以下のように年月のみ指定された場合は必ず1日で初期が行われてしまい、年月だけでなく日が入ってしまう
2020年1月1日
January 1, 2020
仕方ないので自作する方向で考える
似たようなことをやりたい人がいた
このひとは月日
だけにしたいみたい
下のようにmomet.jsのLong Date Formats のカスタマイズを使うとカスタマイズできるみたいだけど
moment.updateLocale('en', { longDateFormat : { LT: "h:mm A", LTS: "h:mm:ss A", L: "MM/DD/YYYY", l: "M/D/YYYY", LL: "MMMM Do YYYY", ll: "MMM D YYYY", LLL: "MMMM Do YYYY LT", lll: "MMM D YYYY LT", LLLL: "dddd, MMMM Do YYYY LT", llll: "ddd, MMM D YYYY LT" } });
残念ながら事前にロケール毎に使うフォーマットを定義しておけるわけではなく、使うときにカスタマイズして使うみたいなので、ちょっとやりたいことと違う
なので、単純に下のようなlocalizedFormat()
関数を定義して使うことにする
moment().format(localizedFormat(locale));
localizedFormat()
関数でやりたいこと
function localizedFormat(locale) { if (英語圏のようなフォーマットにしたい言語) { return "MMMM YYYY"; } // それ以外は日本語のようにフォーマット return "YYYY MMMM"; }
これでOKかと思ったら
YYYY
でフォーマットした場合、2020年
の年
がつかず2020
で表現されてしまう
韓国語の場合は년
を付けたいので一律年
ではだめで、これはどうすればよいのか
いい解決方法が思い付かず、しかたないのでサービスで使う分だけif文書いて対応する
いい方法は引き続き調査する