如果提供弃用格式警告,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 8601
和 RFC 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>
我正在使用 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 8601
和 RFC 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>