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



我正在使用 Moment JS,遇到了一些 catch 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/了解更多信息。

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

从下面可以看出,它建议我应该在我的时刻定义中使用字符串+格式。

瞬间 js 中的弃用警告

但是,如果我尝试

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

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

如果我想在我的时刻使用 .locale(),我怎样才能正确地创建我的时刻而不会引起这个弃用警告?

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

原因:

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>

最新更新