ブラウザによって、JSエンジンが解釈できる「日付書式」が違う


この記事は BRIGHT VIE Advent Calendar 2017 16日目の記事になります。

はじめに

私が、IonicなどのiOSアプリやWebアプリを開発している時、
ブラウザはChromeを使い開発しています。

Chromeで動作検証をし、問題なさそう!と思ったタイミングで、
実機へ移すと「スクリプトエラーでてるやん・・・」みたいなことがたまにあります。

ChromeとSafariのJSエンジンの違い

この違いによって、Mac上(Chrome)では上手く動いていたのに、
実機へもっていくとスクリプトエラーで動かない!といったケースが起こってしまいます。

■各ブラウザごとのJSエンジンの違い
Chrome:Chrome V8
Safari:JavaScriptCore

Date型の書式解釈の違い

「そんな書き方だめでしょ!」という批判は、今回は無しでお願いしますw

以下の書き方は、ChromeもSafariもOKです。

var f = new Date("2017/02/03 14:00");
console.log(f);

//Chrome・Safari ◯
// → Fri Feb 03 2017 14:00:00 GMT+0900 (JST)

ですが、以下の書き方はSafariでは怒られます。

var f = new Date("2017-02-03 14:00");
console.log(f);

//Chrome ◯
// → Fri Feb 03 2017 14:00:00 GMT+0900 (JST)

//Safari ✕
// → Invalid Date

「ハイフン付きの日付書式なんて使っちゃだめだよ」と言われてしまいそうですが、
使ってしまったものは仕方ないので、
「以降注意していこう!」と、自分自身に気をつけながら日々成長です。

(そもそも、なんでこんな差異がエンジンごとにでてしまうんだ、、そっちを直してくれ!ともたまに思いますw)