ホームページ >ウェブフロントエンド >jsチュートリアル >React-native-paper-date (y-off) のタイムゾーンの問題
今日の問題は、react-native-paper-dates の使用に問題があり、カレンダー モーダルに表示される曜日が正しくなかったことです。 1 日ずれていました。たとえば、今日は 2024 年 7 月 15 日で、15 日は月曜日の列に表示されるはずでしたが、代わりに日曜日の列に表示されました。
2 環境で以下のコードを実行してみたため、最終的に問題は Intl.DateTimeFormat に関係していることがわかりました。私のものと、Mozilla.dev 上の Javascript ランタイム (とても愚かなことだとわかっていますが、試してみました笑)。
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone); //"UTC" on my local development env //"Asia/Phnom_Penh" on Mozilla.dev
手がかりが得られたので、同僚に愚痴をこぼしたところ、JavaScript の Intl がこのアプリでは安定していないと言われました。そこで彼は、Javascript のエンジンがデフォルトのタイムゾーンを公開しないため、そこからデフォルトのタイムゾーンを取得する方法がないことを述べた、この formatjs リンクを私に送ってきました。そして、React ネイティブ アプリは Hermes Engine を使用しています。これは、タイムゾーンに関する情報を Javascript の Intl に公開しないと思います。そのため、console.log(Intl) を実行しようとすると、常にデフォルトで「UTC」になります。 .DateTimeFormat().resolvedOptions().timeZone) 。
これで答えがわかりました。以下のコードを試すだけで問題は解決します。適切なタイムゾーンを設定することで、カレンダー モーダルのすべての列で曜日が正確になるようになりました。
import '@formatjs/intl-datetimeformat/polyfill' import '@formatjs/intl-datetimeformat/add-all-tz.js' //If this statement doesn't work, use expo-localization's getCalendar() const timezone = Intl.DateTimeFormat().resolvedOptions().timeZone //For my case, I have to use expo-localization const timezone = Localization.getCalendars()[0].timezone if ('__setDefaultTimeZone' in Intl.DateTimeFormat) { Intl.DateTimeFormat.__setDefaultTimeZone('America/Los_Angeles') }
以上がReact-native-paper-date (y-off) のタイムゾーンの問題の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。