TypeError:moment().tz不是函数

San*_*ath 41 javascript unit-testing jasmine momentjs

使用jasmine进行测试时,我收到此错误.

TypeError:moment.tz不是函数

我尝试测试的代码是

let myDate = moment().tz(undefined, vm.timeZone).format('YYYY-MM-DD'); 
Run Code Online (Sandbox Code Playgroud)

Mat*_*ich 81

固定

如果您使用的是Node.js,则可能会意外使用

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

代替

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

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

npm install moment-timezone --save

说明

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

  • 任何想法为什么这是在我的本地机器上使用时刻(多年)和今天它今天抛出错误?仅使用'时刻'也可以在我的机器上本地工作,但不能在同事机器上工作.例如,这是有效的:const moment = require('moment'); var date = moment(new Date()).tz('America/New_York').format('ddd.MMMM Do YYYY,h:mm a'); (这对我有用) (4认同)
  • 我只是花了太多时间试图修复测试套件。非常感谢您的回答! (3认同)
  • 我的机器也刚刚坏了。只是想知道为什么以前没有。 (2认同)
  • @MattKim最后,这是`package-lock.json`的问题,将其删除/`npm i`并解决了这个问题:/ (2认同)

小智 19

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

import moment from 'moment';
import 'moment-timezone';
Run Code Online (Sandbox Code Playgroud)

  • 这工作了将近两年,现在我必须“从‘时刻时区’导入时刻” (5认同)

Dav*_*han 10

对于 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'),

Run Code Online (Sandbox Code Playgroud)


小智 10

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

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

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

import moment from 'moment-timezone'
Run Code Online (Sandbox Code Playgroud)

import * as moment from 'moment-timezone'
Run Code Online (Sandbox Code Playgroud)

所以

moment().tz("America/Los_Angeles").format()
Run Code Online (Sandbox Code Playgroud)


小智 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=

Run Code Online (Sandbox Code Playgroud)

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


小智 5

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

你应该做

npm install moment-timezone
Run Code Online (Sandbox Code Playgroud)

然后像这样使用它

var moment = require('moment-timezone');
moment().tz("America/Los_Angeles").format();
Run Code Online (Sandbox Code Playgroud)