【问题标题】:MomentJS Using Locale If Deprecation Format Warning Provided如果提供了弃用格式警告,则 MomentJS 使用区域设置
【发布时间】:2018-12-17 10:18:37
【问题描述】:

我正在使用 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/ 了解更多信息。

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

从以下建议我应该在我的 Moment 定义中使用 String + 格式。

Deprecation warning in moment js

但是如果我尝试

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() 与我的时刻一起使用,我怎样才能正确地创建我的时刻而不会引发此弃用警告?

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

【问题讨论】:

  • 好吧,您给它的日期格式与实际日期字符串不匹配。您提供的日期格式类似于“2018-07-04 06:00:00”。
  • @RedQueries 你检查我的答案吗?

标签: javascript momentjs locale


【解决方案1】:

原因:

momentjs 库不支持您传递给 moment() 的日期,即 2018 年 7 月 4 日上午 6:00(更具体的 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>

【讨论】:

  • 您的解决方案正是 Moment 所警告的。 Date() 构造函数可能工作也可能不工作,具体取决于浏览器。正确的解决方案是使用与所用格式实际匹配的日期格式。
  • 感谢 VicJordan 和 Pointy 的帮助。抱歉回复慢。 VicJordan,这个很详细。谢谢。
猜你喜欢
  • 1970-01-01
  • 2018-03-31
  • 1970-01-01
  • 1970-01-01
  • 2017-08-23
  • 1970-01-01
  • 2013-05-05
  • 2020-07-25
  • 1970-01-01
相关资源
最近更新 更多