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 不是函数的主要内容,如果未能解决你的问题,请参考以下文章
类型错误:$.fn.dataTable.moment 不是函数
TypeError: Object(...) is not a function with React Table and moment.js