TypeError: moment().tz 不是函数

Posted

技术标签:

【中文标题】TypeError: moment().tz 不是函数【英文标题】:TypeError: moment().tz is not a function 【发布时间】:2018-04-13 06:02:30 【问题描述】:

使用 jasmine 进行测试时,出现此错误。

TypeError:moment.tz 不是函数

我尝试测试的代码是

let myDate = moment().tz(undefined, vm.timeZone).format('YYYY-MM-DD'); 

【问题讨论】:

【参考方案1】:

错误 -> TypeError: (0 , moment_timezone_1.default) 不是函数

这是打字稿错误, 默认情况下,它需要时刻作为函数

我通过替换解决了这个问题

从“时刻-时区”导入时刻

import * as moment from 'moment-timezone'

moment().tz("America/Los_Angeles").format()

【讨论】:

正如目前所写,您的答案尚不清楚。请edit 添加其他详细信息,以帮助其他人了解这如何解决所提出的问题。你可以找到更多关于如何写好答案的信息in the help center。【参考方案2】:

对于 Typescript:截至 2021 年 4 月的作品

import moment from 'moment';
import 'moment-timezone';

cont x = moment.tz('America/Los_Angeles').format('YYYY-MM-DD HH:mm:ss ZZ');

cont y = moment().isBetween(
            moment.tz('1-1-2021', 'America/Los_Angeles'),
            moment.tz('1-1-2021', 'America/Los_Angeles').add(2, 'hours'),

【讨论】:

import 'moment-timezone'; 绝对做到了。谢谢大家!【参考方案3】:

Moment 应该是一个函数调用。所以使用let myDate = moment().tz(...)

更多详情请见https://momentjs.com/timezone/docs/。

编辑

您还应该确保通过正确的 npm install 和 require(对于 Node)或正确的脚本标签(对于一般浏览器使用)将时区扩展包含到 moment 库中。有关要包含的库/脚本,请参阅链接文档。

二次编辑

如果有人在一个答案为 +120 的问题上滚动到这么远:

moment 是一个函数并且需要括号的建议是指已发布问题的未编辑版本,该版本具有语法

let myDate = moment.tz(undefined, vm.timeZone).format('YYYY-MM-DD');

【讨论】:

失败 - moment(...).tz is not a function【参考方案4】:

对于 Node.js,根据原始文档: moment js documentation

你应该这样做

npm install moment-timezone

那就这样用吧

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();

【讨论】:

【参考方案5】:

我也遇到过这个问题。它可以工作多年,但在重构之后,它就不起作用了。正如我所调查的,moment-timezone@0.5.13 依赖于moment@>=2.9.0,这可能与moment 本身不同。

在我的例子中,moment-timezone 使用moment@2.24.0,而moment 本身的版本是2.18.1。导致moment-timezone 修饰了moment错误 版本。

我已经像这样更改了 yarn.lock:

moment-timezone@0.5.13:
  version "0.5.13"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment-timezone/-/moment-timezone-0.5.13.tgz#99ce5c7d827262eb0f1f702044177f60745d7b90"
  integrity sha1-mc5cfYJyYusPH3AgRBd/YHRde5A=
  dependencies:
    moment ">= 2.9.0"

moment@2.18.1, moment@>= 2.9.0:
  version "2.18.1"
  resolved "https://arti-dev.ss.aws.fwmrm.net/api/npm/fw-npm/moment/-/moment-2.18.1.tgz#c36193dd3ce1c2eed2adb7c802dbbc77a81b1c0f"
  integrity sha1-w2GT3Tzhwu7SrbfIAtu8d6gbHA8=

moment & moment-timezone 在这种情况下可以互相替代使用。

【讨论】:

【参考方案6】:

下面的代码给我...

import moment from 'moment';
import 'moment-timezone';

【讨论】:

谢谢!不知道你需要安装 moment-timezone。 这工作了将近两年,现在我不得不import moment from 'moment-timezone'【参考方案7】:

修复

如果您使用的是 Node.js,您可能会不小心使用

const moment = require('moment'); //时刻

而不是

const moment = require('moment-timezone'); //时刻-时区

另外,请确保您已经安装了 moment-timezone

npm install moment-timezone --save

说明

使用require('moment') 安装moment,然后决定使用npm install moment-timezone,然后忘记更新require,可能会出现需要没有时区的时刻的错误。

【讨论】:

任何想法为什么这在我的本地机器上使用 moment(多年)而今天它今天抛出错误?仅使用“时刻”也在我的机器上本地工作,但不能在同事机器上工作。例如,这是有效的: const moment = require('moment'); var date = moment(new Date()).tz('America/New_York').format('ddd. MMMM Do YYYY, h:mm a'); (这对我有用) 我不完全理解你的第一个问题。你能改写吗?您可以将moment(new Date()) 替换为moment()。我使用 npm install 命令编辑了我的回复,所以请在任何环境(您的本地机器、同事的机器、生产机器)上再试一次。 我的机器也刚坏了。只是想知道为什么以前没有。 @MattKim 最后这是package-lock.json 的问题,删除它/npm i 并解决了问题:/ 我只是花了太多时间试图修复测试套件。非常感谢这个答案!

以上是关于TypeError: moment().tz 不是函数的主要内容,如果未能解决你的问题,请参考以下文章

Unix时间戳的moment.js格式?

类型错误:$.fn.dataTable.moment 不是函数

打字稿 - 条件要求

TypeError:utils.endOfDay 不是函数

TypeError: Object(...) is not a function with React Table and moment.js

TypeError:格式不是 date-fns 中的函数