LoginSignup
1

More than 5 years have passed since last update.

時刻表示をゼロパディングする方法と、日本語ロケールの不思議な挙動について

Posted at

時刻表示をゼロパディングする方法

new Date(new Date().setHours(1,1)).toLocaleString('en',{ hour12:false, hour:'2-digit', minute:'2-digit' });
/*
01:01
*/

以下、余談

//日本語ロケールだと上手くいかない
new Date(new Date().setHours(1,1)).toLocaleString('ja',{ hour12:false, hour:'2-digit', minute:'2-digit' });
/*
1:01
*/

//時間だけにすると謎の挙動
new Date(new Date().setHours(1,1)).toLocaleString('ja',{ hour12:false, hour:'2-digit' });
/*
1時
*/

//12時間表記だとこう
new Date(new Date().setHours(1,1)).toLocaleString('ja',{ hour12:true, hour:'2-digit' });
/*
午前1時
*/

//いやあの、'numeric'ってお願いしましたよね?
new Date(new Date().setHours(1,1)).toLocaleString('ja',{ hour:'numeric' });
/*
1時
*/

なぜだろう、と思ってググって見たところ、このような話が。

In CLDR v28, Japanese simply doesn't have any 2-digit hour date formats

507037 - Date.toLocaleString ignores hour:2-digit setting - chromium - Monorail

「単純に日本語には2ケタ時のフォーマットがないみたい」
マジっすか。

<dateFormatItem id="h">aK時</dateFormatItem>
<dateFormatItem id="H">H時</dateFormatItem>
<dateFormatItem id="hm">aK:mm</dateFormatItem>
<dateFormatItem id="Hm">H:mm</dateFormatItem>
<dateFormatItem id="hms">aK:mm:ss</dateFormatItem>
<dateFormatItem id="Hms">H:mm:ss</dateFormatItem>

http://unicode.org/cldr/trac/browser/trunk/common/main/ja.xml#L1399
マジだわ……
なんか不思議な設定ですね。
 
 
 
そういうわけで。
時刻の日本語ロケールは怪しいので触らないほうが無難です。enを使いましょう。
 
 
 

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1