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

11 回复

我试了一下,没有报错,我是这样写的 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 中使用 dayjstimezone 插件时,如果遇到 ReferenceError: Intl is not defined 错误,通常是因为 Intl 对象在当前的 JavaScript 环境中不可用。Intl 对象是 JavaScript 国际化 API 的一部分,用于处理日期、时间、数字和字符串的格式化。

解决方案

  1. 检查运行环境

    • Intl 对象在大多数现代浏览器中都支持,但在某些环境(如 Node.js 的旧版本或某些小程序环境)中可能不可用。
    • 如果你在 Node.js 环境中运行代码,确保你的 Node.js 版本支持 Intl。你可以通过 node -p "process.versions" 来查看你的 Node.js 版本。
  2. Polyfill

    • 如果你的环境不支持 Intl,你可以使用 intlfull-icu 这样的 polyfill 来提供支持。
    • 安装 intl polyfill:
      npm install intl
      
    • 然后在你的代码中引入:
      import 'intl';
      import 'intl/locale-data/jsonp/en'; // 根据需要引入其他语言环境
      
  3. 使用 dayjs 的替代方案

    • 如果你无法解决 Intl 的问题,可以考虑使用 dayjs 的其他插件或手动处理时区转换,而不依赖 Intl
  4. 在 uni-app 中处理

    • 如果你在 uni-app 的小程序环境中遇到这个问题,可能需要在 manifest.json 中配置 "intl" 支持,或者使用其他方式处理时区。

示例代码

以下是一个使用 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());
回到顶部