TypeError:未定义不是构造函数(评估'new Intl.RelativeTimeFormat('en',{style:'short',numeric:“ auto”})')

时间:2019-10-08 09:02:58

标签: javascript

我有类似的代码:

const rtf = new Intl.RelativeTimeFormat('en', { style: 'short', numeric: "auto" });

在Safari / 605.1.15中触发错误的

TypeError: undefined is not a constructor (evaluating 'new Intl.RelativeTimeFormat('en', { style: 'short', numeric: "auto" })')

现代JS中的一个如何解决可能不存在Intl API的事实?

1 个答案:

答案 0 :(得分:2)

此方法不受很好的支持。 Can I use RelativeTimeFormat?

enter image description here

无论使用什么浏览器,您都可以使用可模拟所需功能的软件包。

我发现可以使用relative-time-format个npm软件包。


安装

  

npm安装相对时间格式--save

使用

import RelativeTimeFormat from "relative-time-format"
import en from "relative-time-format/locale/en.json"

RelativeTimeFormat.addLocale(en)

// Returns "2 days ago"
new RelativeTimeFormat("en", {
  style: "long" // "long" is the default. Other options: "short", "narrow".
}).format(-2, "day")

要检查浏览器是否兼容:

if (Intl === void 0 || typeof Intl.RelativeTimeFormat !== 'function') {
   // Browser not compatible
}

替代:

const rtf = (Intl &&
            Intl.RelativeTimeFormat &&
            new Intl.RelativeTimeFormat('en', {
               style: 'short',
               numeric: "auto",
            })) || false;

if (!rtf) {
   // Not compatible
}