◆ input の type="date" で日付選択用カレンダーが出ない
◆ カレンダーが出ないだけで直接入力はできる
◆ 75 は問題なくて 76 にアップデート後出ない

Chrome 76 が出たので更新してみたらカレンダーが出ないことに気づきました
OS が違う複数の PC で確認しています
75 の PC ではでています

MDN のページの DEMO で「▼」を押せばカレンダーが出るはずなのですが何もおきません

一応このページでも置いときます



76 での日付関係の変更というとこういうのがありますが カレンダーが出ないことと関係あるのでしょうか……
調べた感じでは特にバグ報告も見当たらなかったので 日本語版特有の問題なのかなと思ってます

https://chromestatus.com/feature/5091631933947904
https://chromestatus.com/feature/5077134515109888

けっこう大きなバグだと思うので メジャーバージョンが 76 のままで修正されそうな気もするので 発生した詳細なバージョンを書いておきます

Chrome 76.0.3809.87

修正された

コメントで情報いただきましたが 76.0.3809.100 で修正されたことを確認しました
リリース日は 2019/8/6 (日本だと 7 日) のようです

修正コミットはこれのようです

予想通り日本語版だけみたいですね
何が悪かったのかを見てみると invalid な日付を使ってしまうケースがあったのを修正したようです
知らなかったのですが ECMAScript の valid な最後の日付は 「275760-09-13」 のようです
formatJapaneseImperialEra 関数では これまではすべての年月で 16 日を使っていて それを 27560 年 9 月の場合は 16 日がないので 代わりに 7 日を使うように修正しています

ここで例外を throw していたせいで calendarPicker が表示されていなかったみたいです
16 日は中間なので選ばれてたみたいで 275760 年 9 月は 13 日までなので 7 日のようですが なぜ中間を選ぶ必要があるのかはわかりませんでした
また calendarPicker 起動時に最後の日付でこの関数を呼び出してるらしいですが テストならともかく通常の使用でその日付をユーザが使わないならそんな日付にアクセスしなくてよさそうなのですけどアクセスしてるみたいです

最終日付

最終日付がなんでこんな中途半端なのか気になったのでついでに調べてみました
new Date で試してみると

new Date(275760, 8, 13)
// Sat Sep 13 275760 00:00:00 GMT+0900 (日本標準時)

new Date(275760, 8, 14)
// Invalid Date

275760 年 9 月 13 日が最後で以降は Invalid Date です
最近の仕様かと思ったのですが IE で実行してみると 11 だけでなく 8 でも同じ結果になったので 昔からの仕様みたいです
ということはこの日がなにか意味のある日付に思えます

日付的にそれらしいのがないなら経過時間です

+new Date(275760, 8, 13, 9)
// 8640000000000000

数値にするとすごくキレイな数値になりました
9 は日本時間のズレ分です
864 から始まってあとは 0 ということは 10 ** N 日のようです

new Date(275760, 8, 13, 9) / 1000 / 3600 / 24
// 100000000

1970/1/1 から 100,000,000 日 (1 億日) です
すごくキリがいいです
英語的に 10 億のほうが良さそうではありますが JavaScript の Number 型の限界です

Number.MAX_SAFE_INTEGER
// 9007199254740991

+new Date(275760, 8, 13, 9)
// 8640000000000000

次の桁にすると MAX_SAFE_INTEGER を超えるので正しく計算できなくなります