我正在尝试在我的react-native项目中将Timezone与dayjs一起使用,如文档中所述 我需要导入 utc 和时区插件。
import tz from 'dayjs/plugin/timezone';
import utc from 'dayjs/plugin/utc';
dayjs.extend(utc);
dayjs.extend(tz);
但实际上当我开始使用它时,它给我一个错误时区不支持
console.log( dayjs('2013-11-18 11:55').tz('America/Toronto'), 'timezone');
下面的错误来自我在项目中使用的 Intl 包
我尝试更新dayjs包,intl-react包和intl包本身,无法找到任何解决方案来解决这个问题,我仍然不明白这里缺少什么?
正如作者
sohcah
自己所说,这远非理想。但是,如果您只想将日期对象转换为它们在react-native中的时区,您可以添加这个polyfill并将其导入根目录。 原帖。
// @ts-ignore
Date.prototype._toLocaleString = Date.prototype.toLocaleString
// @ts-ignore
Date.prototype.toLocaleString = function (a, b) {
if (b && Object.keys(b).length === 1 && 'timeZone' in b && a === 'en-US') {
return Intl.DateTimeFormat('en-us', {
year: 'numeric',
month: '2-digit',
day: '2-digit',
hour: '2-digit',
minute: '2-digit',
second: '2-digit',
hour12: false,
timeZone: b.timeZone,
})
.format(this)
.replace(/(\d{2})\/(\d{2})\/(\d{4}),/g, '$3-$1-$2')
}
// @ts-ignore
return this._toLocaleString(a, b)
}
这让我可以在 React Native 中做
dayjs().tz(timezone)
。如果它仍然没有按预期工作,您可以尝试从这里提到添加@formatjs polyfills。