【问题标题】:Deprecation warning when checking for weekday number检查工作日编号时的弃用警告
【发布时间】:2017-12-12 09:38:12
【问题描述】:

在我的代码中,我想检查周末。这是代码:

if(moment(thisDates).day() !== 6 && moment(thisDates).day() !== 0) {}

thisDatesvaiable 包含:

String {[[PrimitiveValue]]: "2017-12-12"}   

检查本身有效,但我从那一刻起就收到了贬值警告:

moment.min.js:1 弃用警告:提供的值不在 认可的 RFC2822 或 ISO 格式。时刻构建回退到 js Date(),它在所有浏览器和版本中都不可靠。非 不鼓励使用 RFC2822/ISO 日期格式,并将在 即将发布的主要版本。

那一刻我不同意我如何解析我正在检查的日期。但是应该怎么做。通过阅读docs 无法弄清楚。有什么建议吗?

【问题讨论】:

  • 作为参考,RFC2822 格式为Tue, 12 Dec 2017 09:41:12 UTC。 ISO 是2017-12-12T09:41:12+00:00。这些是当下想要的格式。
  • moment("2017-12-12")moment(String) 接受而没有弃用警告,您能否提供一个显示您的问题的 sn-p 或小提琴?
  • String {[[PrimitiveValue]]: "2017-12-12" 在我看来不像 JS,这是什么来的?它是模板引擎还是一些服务器端脚本?你确定当它把它变成一个 JS 变量时,它会保持 yyyy-mm-dd 格式吗?还是将其重新格式化为momentJS不喜欢的特定语言环境的格式?
  • 另外,if(moment(thisDates).day() !== 6 && moment(thisDates).day() !== 0) {} 效率真的很低——你正在创建两个新的时刻对象,并在一个就足够的情况下进行与之相关的所有解析和处理——先在行上声明它然后重复使用它,例如var day = moment(thisDates).day(); if( day !== 6 && .day !== 0) {}

标签: javascript jquery momentjs


【解决方案1】:

我显然以错误的方式使用 Jquery.each:

dates = ["2017-12-12", "2017-12-13"]
    jQuery.each(dates, function() {
        var thisDates = this;
        if (moment(thisDates).day() !== 6 && moment(thisDates).day() !== 0) {}
      }

改成:

jQuery.each(dates, function(index, value) {
  var thisDates = value;
  if (moment(thisDates).day() !== 6 && moment(thisDates).day() !== 0)
}

现在我没有收到任何警告

【讨论】:

  • 未来读者的一些上下文:问题是因为(根据api.jquery.com/jquery.each)“Javascript 将始终将 this 值包装为 Object,即使它是简单的字符串或数字值”。因此,在上面的第一个(非工作)示例中,this 是一个对象,字符串中的每个字符都有一个属性,而不是简单的字符串。使用回调提供的value 参数,如第二个示例所示,是访问被迭代值的正确方法。
猜你喜欢
  • 2015-01-30
  • 1970-01-01
  • 2019-01-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-01-29
相关资源
最近更新 更多