在我的Angular程序中,我尝试根据每个日期是否在2个设置日期之间过滤数组。我将日期设置为当月的第一个和最后一个:
StartDate = new Date(this.date.getFullYear(), this.date.getMonth(), 1);
EndDate = new Date(this.date.getFullYear(), this.date.getMonth() + 1, 0);
我让用户选择他们想要查看数组结果的日期:
<div class="col-sm-12" style="padding-left: 0px; text-align: center; padding-bottom: 10px;">
<label class="col-sm-5" style="text-align: right;">Start Date</label>
<div class="col-sm-7">
<input class="form-control" type="date" id="StartDate" [ngModel]="StartDate | date: 'yyyy-MM-dd'" (ngModelChange)="StartDate=$event" name="StartDate" />
</div>
</div>
<div class="col-sm-12" style="padding-left: 0px; text-align: center;">
<label class="col-sm-5" style="text-align: right;">End Date</label>
<div class="col-sm-7">
<input class="form-control" type="date" id="EndDate" [ngModel]="EndDate | date: 'yyyy-MM-dd'" (ngModelChange)="EndDate=$event" name="EndDate" />
</div>
</div>
</div>
&#13;
然后,我调用一个根据这些日期过滤数组的函数:
setValues(): void {
this.datePTO = this.ptoData.filter(pto => pto.date > this.StartDate && pto.date < this.EndDate);
}
&#13;
如果用户保持日期相同然后尝试查看数组,则其中没有任何内容。然而,如果他们根本改变日期,阵列将填充其中的内容。我发现无论何时用户更改日期,它们都会更改为字符串,然后以某种方式进行比较。我如何解决这个问题,以便他们可以点击按钮,如果他们想要的日期范围是显示的默认日期?
答案 0 :(得分:1)
这听起来像是一个类型问题。
比较Date
类型时,它们会通过函数number
转换为valueOf()
。将String
与number
进行比较似乎总是返回false
。这可能是为什么在您再次设置日期之前它不起作用,以便StartDate
和EndDate
成为String
类型。
我建议只要坚持使用yyyy-mm-dd
格式的字符串。我的意思是,首先将StartDate
和EndDate
声明为字符串而不是日期。
或者您可以使用以下内容解析输入和/或setValues
函数中的日期:
parseDate(dateString: string): Date {
if (dateString) {
return new Date(dateString);
} else {
return null;
}
}