<p>moment()。fromNow()返回“无效日期”</p>

创建于 2018-10-07  ·  10评论  ·  资料来源: moment/moment

问题说明和复制步骤:
我正在使用时刻来获取用户帐户的年龄,方法是:
moment(user account created date here).fromNow()但返回“无效日期”。 这以前曾起作用,但不再起作用。 创建的日期类似于: 2018-06-07T22:54:07.310Z
使用moment(date here).format()可以正常工作。
请包括所有使用的变量的值。
我用来格式化和使用fromNow的日期是2018-06-07T22:54:07.310Z
环境:
不和谐机器人
示例:OSX上的Chrome 49,Windows 7上的Internet Explorer 10,Ubuntu 16.0.4上的Node.JS 4.4.4
上面列出的任何内容我都不会用到。
浏览器和操作系统对我们都很重要,尤其是在您拥有不寻常的环境(例如IOT应用程序)的情况下。

其他可能有用的信息: https : //i.imgur.com/4LFsZh3.png

  • 运行代码的计算机的时区设置:PST
  • 代码运行的时间和日期:12:20PM,10/7/18
  • 其他正在使用的库(TypeScript,Immutable.js等)无

如果要报告问题,请在您使用的环境中运行以下代码,并包括输出:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

太阳2018年10月7日12:29:05 GMT-0700(太平洋夏令时间)
2018-10-7 12:29:05
420
2.22.2
确保您的问题暂时隔离。

最有用的评论

谢谢回复。 我正在使用NodeJS,因此没有导航器环境。

new Date())。toString()2019年1月17日星期四06:53:11 GMT-0600(中部标准时间)
新的Date())。toLocaleString():1/17/2019,6:53:11 AM
新的Date())。getTimezoneOffset():360
moment.version:2.23.0
NodeJS是v11.6.0

我一直在做一些测试,冲突是一个Object.prototype构造函数。

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

所有10条评论

您如何运行Discord Bot?

您说:_“此方法以前有效,但不再有效” _
自工作以来,是否有任何更改-例如,您是否更新了运行Discord机器人的环境? “用户帐户创建日期”的格式是否已更改?

您是否能够修改不和谐的bot代码以显示以下内容的输出(特别是使用硬编码的字符串):

console.log('moment.format:', moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', moment("2018-06-07T22:54:07.310Z").fromNow());

它一直在工作,然后才停止。 没有代码更改。 该机器人没有改变任何环境。 日期的解析方式似乎也相同。

这是控制台输出的内容;

moment.format: 2018-06-07T15:54:07-07:00
moment.fromNow: Invalid date

这是我的用法( this.client.moment是我如何定义矩):

 console.log('moment.format:', this.client.moment("2018-06-07T22:54:07.310Z").format());
console.log('moment.fromNow:', this.client.moment("2018-06-07T22:54:07.310Z").fromNow());

不知道我是否提到过,但是这是我正在使用的当前版本:
“ moment”:“ ^ 2.22.2”,
“ moment-duration-format”:“ ^ 2.2.2”
我在节点的v8.9.2上

我在Angular 6(基于离子的应用程序)中也遇到了类似的问题,而2.22.2瞬间就因为这样简单的操作而返回了无效日期。
moment(new Date()).fromNow();
请指教。

在2.23.0中仍在发生

time = moment('2017-08-08T18:29:07.000Z')
time.isValid() // true
time.toNow() // Invalid date
time.fromNow() // Invalid date

感谢您打开此请求
嗨! 感谢您提交此问题! 不幸的是,我无法重现这一点。 您还能提供其他信息吗?

如果在计算机上运行以下行,则将有帮助:

console.log( (new Date()).toString())
console.log((new Date()).toLocaleString())
console.log( (new Date()).getTimezoneOffset())
console.log( navigator.userAgent)
console.log(moment.version)

谢谢回复。 我正在使用NodeJS,因此没有导航器环境。

new Date())。toString()2019年1月17日星期四06:53:11 GMT-0600(中部标准时间)
新的Date())。toLocaleString():1/17/2019,6:53:11 AM
新的Date())。getTimezoneOffset():360
moment.version:2.23.0
NodeJS是v11.6.0

我一直在做一些测试,冲突是一个Object.prototype构造函数。

Object.prototype.test = function () {
    return test
}

const moment = require('moment');

const time = moment('2017-08-08T18:29:07.000Z')
console.log(time.isValid()) // true
console.log(time.toNow()) // Invalid date
console.log(time.fromNow()) // Invalid date

我也受此影响。
起初,我认为是在构造函数中使用不完整的unix时间戳(如何向我提供数据)是原因,但是在测试MomentJS文档中的示例代码后,我发现对fromNow()任何调用返回Invalid Date

这里同样的问题。

toString Tue Jan 07 2020 10:20:09 GMT+0100 (Central European Standard Time)
toLocaleString 1/7/2020, 10:20:09 AM
getTimezoneOffset -60
navigator.userAgent Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:71.0) Gecko/20100101 Firefox/71.0
moment.version 2.24.0

同样在"moment": "^2.24.0", 。 在浏览器上运行时,它工作正常,但在nodejs中失败。 任何解决方法,直到修复? @marwahaha

这是一个hack,但是您可以更改Object.prototype扩展名,以便无法枚举:

console.log(moment().fromNow()); // 'a few seconds ago'
Object.prototype.randomExtension = true;
console.log(moment().fromNow()); // 'Invalid date'

Object.keys(Object.prototype).forEach(function(extension) {
  Object.defineProperty(Object.prototype, extension, { enumerable: false });
});

console.log(moment().fromNow()); // 'a few seconds ago'
此页面是否有帮助?
0 / 5 - 0 等级