我在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文件。
答案 0 :(得分:2)
您的代码有两个问题:
moment(String)
解析既不符合RFC2822或ISO 8601标准格式的字符串,因此您的代码会提供弃用警告。您必须改为使用moment(String, String)
。_i
作为Internal Properties指南说明:
[...]
_d
的值和任何其他以_
为前缀的属性不得用于任何目的。
要比较时刻对象,您可以使用isSameOrBefore
,isAfter
,isBefore
以及文档Query部分中列出的其他方法。
这是一份工作样本:
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;
答案 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);