ES5以降では、Date.parse()に不正な日時を渡した場合、NaNを返す……が、不正な日時の解釈に実装によって違いがあることを今さら知った。タイトルのように2015-02-31を渡すと、Firefox 67はNaNを返すが、Chrome 75などでは良きにはからって、つまり2015-03-03とみなしてくれる。書式そのものの解釈の違いだけでなく、こんなところにも非互換性が埋まっていて、まんまとハマった。 Chrome 75やEdge 18、Node.js v12.0.0では以下のようになる。対してFirefox 67は2番目のみNaNを返す。 console.log(Date.parse("2015-02-28")); // 1425081600000 console.log(Date.parse("2015-02-31")); // 1425340800000 console.lo