uni-app dayjs的timezone插件使用报错 ReferenceError: Intl is not defined
uni-app dayjs的timezone插件使用报错 ReferenceError: Intl is not defined
预期结果:
正常使用
实际结果:
报错
bug描述:
使用dayjs的timezone插件时,app端报错ReferenceError: Intl is not defined,浏览器运行时正常
| 开发环境 | 版本号 | 项目创建方式 |
|----------------|--------|--------------|
| PC开发环境操作系统 | Windows | HBuilderX |
| PC开发环境操作系统版本号 | 10 | |
| HBuilderX类型 | 正式 | |
| HBuilderX版本号 | 3.99 | |
| 手机系统 | Android | |
| 手机系统版本号 | Android 9.0 | |
| 手机厂商 | 华为 | |
| 手机机型 | 荣耀7X | |
| 页面类型 | vue | |
| vue版本 | vue3 | |
| 打包方式 | 云端 | |
| 项目创建方式 | HBuilderX | |
更多关于uni-app dayjs的timezone插件使用报错 ReferenceError: Intl is not defined的实战教程也可以访问 https://www.itying.com/category-93-b0.html
我试了一下,没有报错,我是这样写的
import dayjs from ‘dayjs’;
import timezone from ‘dayjs/plugin/timezone’
import utc from ‘dayjs/plugin/utc’
dayjs.extend(utc);
dayjs.extend(timezone);
const timestamp = "2014-06-01 12:00"
const tz = "America/New_York"
const dayjsLocal = dayjs(timestamp);
console.log(dayjsLocal.format('YYYY-MM-DD HH:mm:ss'));
const dayjsAmerica = dayjsLocal.tz(tz)
console.log(dayjsAmerica.format('YYYY-MM-DD HH:mm:ss'));
不同的dayjs版本可能会有差异,可以提供一下您的dayjs版本和测试代码,我这边排查一下
更多关于uni-app dayjs的timezone插件使用报错 ReferenceError: Intl is not defined的实战教程也可以访问 https://www.itying.com/category-93-b0.html
dayjs版本是1.11.10。上面的引入注册是一样的,我的代码如下:
dayjs(targetTime).tz(getTz)这样写不报错,但是我需要的是let CurrentTime = dayjs.tz(targetTime, getTz);这样直接指定时区的dayjs对象,或者有什么方法能平替dayjs.tz(targetTime, getTz)么
回复 j***@singoo.cc: app报错,pc正常
回复 j***@singoo.cc: ios是不是也正常
回复 JXWang: IOS不报错但是转换出来的时间不对
回复 j***@singoo.cc: https://blog.csdn.net/qq_16445551/article/details/89182902 可以参考一下这篇文章
回复 j***@singoo.cc: 这个问题解决了吗? 这边也遇到了该问题
回复 twiglau: 已经解决 用 momentjs
Intl 小程序内部不支持这个标准,建议用momen代替
https://momentjs.cn/docs/#/-project-status/
https://momentjs.com/timezone/docs/
在 uni-app 中使用 dayjs 的 timezone 插件时,如果遇到 ReferenceError: Intl is not defined 错误,通常是因为 Intl 对象在当前的 JavaScript 环境中不可用。Intl 对象是 JavaScript 国际化 API 的一部分,用于处理日期、时间、数字和字符串的格式化。
解决方案
-
检查运行环境:
Intl对象在大多数现代浏览器中都支持,但在某些环境(如 Node.js 的旧版本或某些小程序环境)中可能不可用。- 如果你在 Node.js 环境中运行代码,确保你的 Node.js 版本支持
Intl。你可以通过node -p "process.versions"来查看你的 Node.js 版本。
-
Polyfill:
- 如果你的环境不支持
Intl,你可以使用intl或full-icu这样的 polyfill 来提供支持。 - 安装
intlpolyfill:npm install intl - 然后在你的代码中引入:
import 'intl'; import 'intl/locale-data/jsonp/en'; // 根据需要引入其他语言环境
- 如果你的环境不支持
-
使用
dayjs的替代方案:- 如果你无法解决
Intl的问题,可以考虑使用dayjs的其他插件或手动处理时区转换,而不依赖Intl。
- 如果你无法解决
-
在 uni-app 中处理:
- 如果你在 uni-app 的小程序环境中遇到这个问题,可能需要在
manifest.json中配置"intl"支持,或者使用其他方式处理时区。
- 如果你在 uni-app 的小程序环境中遇到这个问题,可能需要在
示例代码
以下是一个使用 intl polyfill 的示例:
import 'intl';
import 'intl/locale-data/jsonp/en'; // 根据需要引入其他语言环境
import dayjs from 'dayjs';
import utc from 'dayjs/plugin/utc';
import timezone from 'dayjs/plugin/timezone';
dayjs.extend(utc);
dayjs.extend(timezone);
const date = dayjs().tz('America/New_York');
console.log(date.format());

