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

MomentJS Using Locale If Deprecation Format Warning Provided

我正在使用 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 Deprecation warning: value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are discouraged and will be removed in an upcoming major release. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.

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

从下面的内容来看,我应该在我的 Moment 定义中使用 String + format。

但是如果我尝试

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

它将我的 Moment 设置为不正确的毫秒值。它将其设置为 61936855125000,即 3932 年 9 月 13 日星期二 6:58:45 PM GMT+01:00 DST

如果我想在我的时刻中使用 .locale(),我怎样才能正确创建我的时刻而不引发此弃用警告?

如有任何帮助,我们将不胜感激。我希望这个问题是有道理的。

原因:

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

您可以在此处查看支持的 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>