概要
iOS14
の公開に伴いreact-native
で開発したアプリの挙動を確認していたら、何やら日時がずれているのを発見しました。
細かく処理を追跡していったところ、どうやらDate(string)
の挙動が若干変わったようです。
※個人ブログで同様の記事を書いています。今後追記があればそちらを更新していきます。
環境
react-native@0.63.1
iOS14
-
2020/10/14
時点の情報です(今後のアップデートで修正される可能性あり)
コンストラクで文字列を渡している場合は注意
例えば以下のように文字列からDate
型のコンストラクタを利用した場合です。
サンプル①はISO-8601
の拡張形式のタイムゾーンを指定していない形式です(この時点でオラオラ仕様なのも問題なのですが・・・)。
// サンプル①
const sample1 = '2020-10-10T00:00:00';
// サンプル②
const sample2 = '2020/10/10 00:00:00';
// それぞれDate型にキャストする
const result1 = new Date(text1);
const result2 = new Date(text2);
// 結果を表示
console.log('result1 --> ', result1.toString());
console.log('result2 --> ', result2.toString());
この実行結果がiOS14
前後で異なります。
それぞれ以下の通りです。
出力結果(iOS14未満)
result1 --> Wed Oct 14 2020 09:00:00 GMT+0900 (JST)
result2 --> Wed Oct 14 2020 00:00:00 GMT+0900 (JST)
出力結果(iOS14)
result1 --> Wed Oct 14 2020 00:00:00 GMT+0900 (JST)
result2 --> Wed Oct 14 2020 00:00:00 GMT+0900 (JST)
サンプル①の場合の結果が変わっているのが分かります。
まとめ
そもそも渡している文字列が正しいフォーマットから少し外れたものであるのも悪いですが、iOS14
前後でタイムゾーン無しの文字列を渡した際の解析処理が変わったのだと思います。
react-native
固有の事象なのか、iOS
のネイティブ部分が変わった故なのかいまいち判断がつかない(そこまで知識がない)のですが、同様の事象に遭遇される方もいるかと思うので記事にしました。