TypeError:moment()。tz不是函数


72

使用茉莉花测试时,出现此错误。

TypeError:moment.tz不是函数

我尝试测试的代码是

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

Answers:


138

固定

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

const moment = require('moment');//瞬间

代替

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

另外,请确保您已安装带有

npm install moment-timezone --save

说明

要求时间没有时区的错误可能发生在安装时与时require('moment'),之后决定npm install moment-timezone,然后忘记更新require


4
有什么想法为什么这会花费我的时间(多年)在我的本地计算机上运行,​​而今天却引发了今天的错误?在我的机器上也可以只使用“ moment”,但不能在同事的机器上使用。例如,这是可行的:const moment = require('moment'); var date = moment(new Date())。tz('America / New_York')。format('ddd。MMMM Do YYYY,h:mm a'); (这对我
Matt Kim

1
我不完全了解您的第一个问题。你能改写一下吗?您可以替换moment(new Date())为just moment()。我使用npm install命令编辑了响应,因此请在任何环境(您的本地计算机,同事的计算机,生产计算机)上再次尝试它们。
马特·古德里奇

1
我的机器也刚坏过。只是想知道为什么以前没有。
凯文·阿米尔南诺夫

1
@MattKim我有同样的问题。当我运行时npm i,它将安装我的moment@2.24.0。我不知道为什么,但是npmmoment-timezone用子存储库node_modules和安装moment@2.24.0,所以我使用的lib不会被更新。在生产中,我没有错误时间的子node_module目录。为什么npm每次都在计算机上执行此操作?我在两台计算机上都使用相同的npm版本。
Patrick Portal

3
@MattKim最后,它是一个问题package-lock.json,将其删除/npm i并修复了该问题:/
Patrick Portal

33

下面的代码对我来说...

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

1
谢谢!不知道您需要安装moment-timezone。
PeeJee

这工作了将近两年,现在我不得不import moment from 'moment-timezone'
Petros Kyriakou

5

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

你应该做

npm install moment-timezone

然后像这样使用

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

3

我也遇到了这个问题。它可以工作很多年,但是经过重构之后,它就不起作用了。根据我的调查,moment-timezone@0.5.13取决于moment@>=2.9.0可能与moment自己不同。

就我而言,moment-timezone使用moment@2.24.0moment其本身的版本是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=

momentmoment-timezone在这种情况下,&可以互相替代。


-2

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

有关更多详细信息,请参见https://momentjs.com/timezone/docs/

编辑

您还应确保通过正确的npm安装并要求(对于Node)或正确的脚本标签(对于常规浏览器使用)将时区扩展包括在时刻库中。请参阅链接的文档以获取要包含的库/脚本。

第二编辑

如果有人已经将这个问题卷入了+120可接受答案的问题中,那么:

该建议moment是一个函数,需要使用方括号,是指所发布问题的未经编辑的版本,其语法如下:

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


2
失败,带有-moment(...)。tz不是函数
Sanath
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.