弃用警告:时刻构建回落到日期

dar*_*ush 155 javascript date momentjs

我使用以下代码使用Moment.js将服务器端日期时间转换为本地时间

 moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
Run Code Online (Sandbox Code Playgroud)

但我得到:

弃用警告:时刻构建回落到日期.这是不鼓励的,将在即将发布的主要版本中删除.有关详细信息,请参阅https://github.com/moment/moment/issues/1407.

看来我无法摆脱它!我该如何解决?

Joe*_*son 300

要摆脱警告,您需要:

  • 传入日期字符串的ISO格式版本:

    moment('2014-04-23T09:54:51');

  • 传入你现在拥有的字符串,但告诉Moment字符串的格式:

    moment('Wed, 23 Apr 2014 09:54:51 +0000', 'ddd, DD MMM YYYY HH:mm:ss ZZ');

  • 将您的字符串转换为JavaScript Date对象,然后将其传递给Moment:

    moment(new Date('Wed, 23 Apr 2014 09:54:51 +0000'));

最后一个选项是Moment目前支持的内置回退,其中包含已弃用的控制台警告.他们表示,他们不会在未来版本中支持这种后备.他们解释说使用new Date('my date')太难以预测了.

  • 上述答案中的项目符号中的任何文本都会产生比启动此问题的混淆更好的弃用警告消息. (36认同)
  • 使用`moment((new Date('Thursday, November 12, 2015 11:59 PM').toISOSring());`好吗?或者我只是在压制一个问题,准备在不久的将来像这样默默崩溃? (3认同)

niu*_*ech 38

作为替代方法,您可以通过设置来禁止显示弃用警告 moment.suppressDeprecationWarnings = true;


Vig*_*aja 7

moment内部的日期构造在new Date()javascript中使用。该new Date()构造可在所有浏览器中以RFC2822ISO格式识别日期字符串。当构造moment日期不是这些格式的对象时,将引发弃用警告。

尽管会引发弃用警告,但对于某些格式,moment将在Chrome中成功构建对象,但在Firefox或Safari中不会成功构建对象。因此,在Chrome中处理日期可能会得到预期的结果(并非总是如此),并抛出Invalid Date其他结果。

考虑02.02.2018

moment("02.02.2018")._d-->Fri Feb 02 2018 00:00:00 GMT+0530 (India Standard Time)

Firefox moment("02.02.2018")._d-->Invalid Date

Safari moment("02.02.2018")._d-->Invalid Date

因此moment.js,如果不使用推荐/标准格式,使用时后果自负。

为取消弃用警告

  1. 正如@Joe Wilson在先前的答案中所建议的那样,给出moment构造的日期格式。

范例: moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");

  1. 以ISO或RFC2822格式提供日期。

示例:moment("2018-02-01T18:30:00.000Z")-ISO格式

moment("Thu, 01 Feb 2018 18:30:00 GMT")- RFC2822格式- 格式在Github上

  1. 如@niutech在先前答案中所建议,设置

moment.suppressDeprecationWarnings = true;

  1. 我建议暂时覆盖输入回退。

    moment.createFromInputFallback=function (config){
        config._d = new Date(config._i);
    }
    
    Run Code Online (Sandbox Code Playgroud)

由于(3)将禁止所有警告,因此(4)将仅禁止日期构造回退。使用(4),您将获得Invalid Date内部new Date()使用,并且在控制台中可以看到其他不赞成使用的东西,因此可以升级一下,或者可以在应用程序中替换不赞成使用的方法。