2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【ReactNative】タイムゾーン無し文字列をDate()に渡した時の挙動がiOS14から異なる件

Posted at

概要

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のネイティブ部分が変わった故なのかいまいち判断がつかない(そこまで知識がない)のですが、同様の事象に遭遇される方もいるかと思うので記事にしました。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?