今天的问题是我在使用react-native-paper-dates时遇到问题,并且日历模态上显示的工作日不正确。关闭了 1 天,例如今天是 2024 年 7 月 15 日,15 日本来应该出现在星期一栏,但结果却出现在星期日栏。
最终我发现问题与 Intl.DateTimeFormat 有关,因为我尝试在 2 个环境中运行以下代码;我的和 Mozilla.dev 上的 Javascript 运行时(我知道这很愚蠢,但我尝试过,哈哈)。
console.log(Intl.DateTimeFormat().resolvedOptions().timeZone); //"UTC" on my local development env //"Asia/Phnom_Penh" on Mozilla.dev
现在我得到了线索,所以我向我的同事抱怨,他提到 Javascript 的 Intl 对于我们的应用程序来说不稳定。所以他在这里向我发送了这个 formatjs 链接,其中提到 Javascript 的引擎不会公开默认时区,因此无法从中获取默认时区;我们的 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中文网其他相关文章!