ホームページ  >  記事  >  ウェブフロントエンド  >  React-native-paper-date (y-off) のタイムゾーンの問題

React-native-paper-date (y-off) のタイムゾーンの問題

WBOY
WBOYオリジナル
2024-07-18 08:15:15962ブラウズ

A timezone problem on 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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。