我正在使用以下代码使用moment.js将服务器端日期时间转换为本地时间。
moment(moment('Wed, 23 Apr 2014 09:54:51 +0000').format('lll')).fromNow()
但我得到:
弃用警告:构建时间回落到js日期。不建议这样做,并将在即将发布的主要版本中将其删除。请参阅https://github.com/moment/moment/issues/1407了解更多信息。
看来我不能摆脱它!我该如何解决?
要消除警告,您需要执行以下任一操作:
-
输入日期字符串的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')
太不可预测了。
作为替代方案,您可以通过设置来禁止显示弃用警告 moment.suppressDeprecationWarnings = true;
moment
内部的日期构造在new Date()
javascript中使用。该new Date()
构造可在所有浏览器中以RFC2822或ISO格式识别日期字符串。当构造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
,如果不使用推荐/标准格式,使用时后果自负。
为取消弃用警告,
- 正如@Joe Wilson在先前的答案中所建议的那样,给出
moment
构造的日期格式。
范例: moment("02.05.2018", "DD.MM.YYYY").format("DD MM YYYY");
- 以ISO或RFC2822格式提供日期。
示例:moment("2018-02-01T18:30:00.000Z")
-ISO格式
moment("Thu, 01 Feb 2018 18:30:00 GMT")
- RFC2822格式-格式在Github上
- 如@niutech在先前答案中所建议,设置
moment.suppressDeprecationWarnings = true;
-
我建议暂时覆盖输入后备。
moment.createFromInputFallback=function (config){ config._d = new Date(config._i); }
由于(3)将禁止所有警告,因此(4)将仅禁止日期构造回退。使用(4),您将获得Invalid Date
内部new Date()
使用,并且可以在控制台中看到其他不赞成使用的内容,因此可以升级一下,或者可以在应用程序中替换不赞成使用的方法。
如果您的日期是通过API传递给您的string
(例如我的问题),则可以使用过滤器将该字符串暂时转换为日期。这将解决临时施工警告。
$scope.apiDate = 10/29/2017 18:28:03";
angular.module('myApp').filter('stringToDate', function() {
return function(value) {
return Date.parse(value);
};
});
将其添加到视图中:
{{apiDate | stringToDate | amDateFormat:'ddd, MMM DD'}}
如以上答案所示。提供日期格式应该可以。
为什么我会收到带有以下代码行的弃用消息。我认为应该使用String +格式来解决此问题。moment.tz('2015:08:20 14:33:20', 'YYYY:MM:DD HH:mm:ss', 'America/New_York')
。另外,请不要让我无法控制所提供的日期格式。我知道自己可以将其转换为'YYYY-MM-DDTHH:mm:ss'
不显示弃用消息。但是,根据文档,该行代码应该起作用。这是我看到的弃用消息。
“弃用警告:提供的值不是公认的RFC2822或ISO格式。此刻的构造应归结为js Date(),这在所有浏览器和版本中均不可靠。不建议使用非RFC2822 / ISO日期格式,并且会以即将发布的主要版本。有关更多信息,请参阅
http://momentjs.com/guides/#/warnings/js-date/。”
就我而言,我试图生成一个日期时间以将其包含在表单数据中。但是我可以访问的字符串格式看起来像“ 10-Sep-2020 10:10”,所以当尝试使用类似
myDate = '10-Sep-2020 10:10';
moment(myDate).format('YYYY-MM-DD HH:mm:ss');
我收到了弃用警告。使用字符串创建日期没有问题,但是您只需要让片刻就知道您要传递的是什么。例如,在显式声明要接收的格式时,例如
moment(myDate, 'DD-MMM-YYYY HH:mm').format('YYYY-MM-DD HH:mm:ss');
结果:2020-09-10 10:10:00
就是这样,警告消失了,瞬间很开心,并且您已经准备好保留日期时间格式。
文章标签:date , javascript , momentjs
版权声明:本文为原创文章,版权归 javascript 所有,欢迎分享本文,转载请保留出处!
评论已关闭!