文字列を以下のように日付に変換した場合、ブラウザによって時間がずれた。
// ISO-8601 拡張形式 で、+09:00を省略した形
var strDate= '2018-01-01T02:00:00';
console.log(new Date(strDate)); // Mon Jan 01 2018 02:00:00 GMT+0900 (東京 (標準時)) ← ブラウザによって結果が変わる
PCのChrome、Edge、IE11はマシンのタイムゾーンを見てくれるみたいで日本時間で取得できたが、モバイルSafariだと±0の標準時で取得され、9時間のずれが発生した。
以下のように正確に入れれば問題ない。
new Date('2018-01-01T02:00:00+09:00');
または、2018/01/01 02:00:00
の形だと +09:00
をつける必要がない。
例えば年月日と時間を別々に取っているときとかは、以下の書き方のほうが楽かも。
var ymd = '2018-01-01';
var time = '02:00';
// '2018/01/01 02:00:00' の形する
var strDate = ymd.replace(/-/g, '/') + ' ' + time + ':00';
console.log(new Date(strDate)); // Mon Jan 01 2018 02:00:00 GMT+0900 (東京 (標準時))
文字列→日付変換時のブラウザによる解析の違いは以下のサイトにまとまっていました。
https://so-zou.jp/web-app/tech/programming/javascript/grammar/object/date.htm#no2