如果提供了弃用格式警告,则MomentJS使用语言环境

时间:2018-07-09 16:51:50

标签: javascript momentjs locale

我正在使用Moment JS,并且遇到了22种情况(但是我想是可以解决的,只是我不确定该怎么做)。

Moment JS给了我以前没有收到过的弃用警告(我猜是在弃用之前),因此如果我尝试以下操作。

moment(‘7/4/2018 6:00 AM’).locale(userLocale).format('YYYY-MM-DD HH:mm:ss’);

我收到警告

  

moment.min.js:1弃用警告:提供的值不在   公认的RFC2822或ISO格式。瞬间的建设回落到js   Date(),在所有浏览器和所有版本中都不可靠。非   不建议使用RFC2822 / ISO日期格式,   即将发布的主要版本。请参阅   http://momentjs.com/guides/#/warnings/js-date/了解更多信息。

尽管有此警告,但我的日期已正确设置并应用了正确的语言环境时间。但是由于警告我有点担心,因此想修复它。

根据以下内容,建议我在Moment定义中使用String +格式。

Deprecation warning in moment js

但是,如果我尝试

moment(‘7/4/2018 6:00 AM’,'YYYY-MM-DD HH:mm:ss').locale(userLocale)

它将我的矩设置为错误的毫秒值。它将其设置为61936855125000,这是格林尼治标准时间+01:00 DST 3932年9月13日星期二的时间

如果我希望在我的时刻使用.locale(),如何在不产生此弃用警告的情况下正确地创建时刻?

在此方面的任何帮助将不胜感激。我希望这个问题有意义。

1 个答案:

答案 0 :(得分:1)

原因:

momentjs库不支持传递您传递给moment()的日期,即7/4/2018 6:00 AM(更具体的MM / DD / YYYY格式)。这就是得到警告的原因。

您可以在此处查看受支持的ISO 8601RFC 2822格式:http://momentjs.com/docs/#/parsing/string/

解决方案:

以受支持的格式(您的ISO 8601格式)将日期传递给moment(),而不是如下所示的原始日期:

var date = new Date('7/4/2018 6:00 AM');
var formattedDate = date.getFullYear() + "-" + parseInt(date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();

var supportedFormat = moment(formattedDate).locale('en').format('YYYY-MM-DD HH:mm:ss');

检查以下工作代码:

var unsupportedFormat = moment('7/4/2018 6:00 AM').locale('en').format('YYYY-MM-DD HH:mm:ss');

console.log(unsupportedFormat); //will show warning


var date = new Date('7/4/2018 6:00 AM');
var formattedDate = date.getFullYear() + "-" + parseInt(date.getMonth() + 1) + "-" + date.getDate() + " " + date.getHours() + ":" + date.getMinutes() + ":" + date.getSeconds();

var supportedFormat = moment(formattedDate).locale('en').format('YYYY-MM-DD HH:mm:ss');
console.log(supportedFormat); // works fine
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.22.2/moment-with-locales.min.js"></script>