我正在使用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(),如何在不产生此弃用警告的情况下正确地创建时刻?
在此方面的任何帮助将不胜感激。我希望这个问题有意义。
答案 0 :(得分:1)
原因:
momentjs库不支持传递您传递给moment()的日期,即7/4/2018 6:00 AM(更具体的MM / DD / YYYY格式)。这就是得到警告的原因。
您可以在此处查看受支持的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>