>  기사  >  웹 프론트엔드  >  반응 네이티브 종이 날짜(y-off)의 시간대 문제

반응 네이티브 종이 날짜(y-off)의 시간대 문제

WBOY
WBOY원래의
2024-07-18 08:15:15962검색

A timezone problem on react-native-paper-date (y-off)

오늘의 문제는 React-native-paper-dates를 사용하는 데 문제가 있고 Calendar Modal에 나타나는 평일이 올바르지 않다는 것입니다. 예를 들어 오늘은 2024년 7월 15일이고 15일은 월요일 열에 표시되어야 했지만 대신 일요일 열에 표시되었습니다.

결국 두 가지 환경에서 아래 코드를 실행해 보았기 때문에 문제가 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')
}

위 내용은 반응 네이티브 종이 날짜(y-off)의 시간대 문제의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.