在if条件下使用时,使用带有时刻js的_i不起作用

时间:2017-07-14 06:04:23

标签: javascript momentjs

我在ifjs中使用_i if if条件,但它没有给出预期的输出。

这是我的代码:

var output = "07-14-2017";
var selectedDates = "06-15-2018";

if(moment(output)._i <= moment(selectedDates)._i)
{
  console.log(output date is less than or equal selected date);
}
else
{
  console.log(output date is greater than selected date);
}

这里我的输出日期是2017年,selecteddates是2018年,但它仍然给我输出'输出日期大于选定日期'。它应该给我一个输出'输出日期小于或等于选定日期'。

我已正确地提供了所有jQuery和momentjs文件。

3 个答案:

答案 0 :(得分:2)

您的代码有两个问题:

  1. 您正尝试使用moment(String)解析既不符合RFC2822或ISO 8601标准格式的字符串,因此您的代码会提供弃用警告。您必须改为使用moment(String, String)
  2. 您正在使用_i作为Internal Properties指南说明:
      

    [...] _d的值和任何其他以_为前缀的属性不得用于任何目的。

  3. 要比较时刻对象,您可以使用isSameOrBeforeisAfterisBefore以及文档Query部分中列出的其他方法。

    这是一份工作样本:

    &#13;
    &#13;
    var output = "07-14-2017";
    var selectedDates = "06-15-2018";
    
    if(moment(output, 'MM-DD-YYYY').isSameOrBefore(moment(selectedDates, 'MM-DD-YYYY')))
    {
      console.log("output date is less than or equal selected date");
    }
    else
    {
      console.log("output date is greater than selected date");
    }
    &#13;
    <script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
    &#13;
    &#13;
    &#13;

答案 1 :(得分:0)

我刚刚测试了您的代码,它可以在Chrome 59中运行,但它会发出以下警告:

  

弃用警告:提供的值不在公认的RFC2822或   ISO格式。时刻构造回落到js Date(),这不是   所有浏览器和版本都可靠。非RFC2822 / ISO日期   不鼓励格式,将在即将到来的专业中删除   发布。请参阅   http://momentjs.com/guides/#/warnings/js-date/了解更多信息。

您的问题可能与您的浏览器的javascript引擎的Date()实现有关,如上面的警告所示。

我建议您将日期重新格式化为更适合时刻的格式,然后重试。

答案 2 :(得分:0)

_i返回不正确的字符串,也不应该根据@Andreas注释使用它。 您可以使用下面的代码给出正确的比较。

moment(selectedDates).isAfter(output);