比较angular2中的日期

时间:2017-07-20 14:14:35

标签: arrays angular date

在我的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;
&#13;
&#13;

然后,我调用一个根据这些日期过滤数组的函数:

&#13;
&#13;
setValues(): void {
    this.datePTO = this.ptoData.filter(pto => pto.date > this.StartDate && pto.date < this.EndDate);
}
&#13;
&#13;
&#13;

如果用户保持日期相同然后尝试查看数组,则其中没有任何内容。然而,如果他们根本改变日期,阵列将填充其中的内容。我发现无论何时用户更改日期,它们都会更改为字符串,然后以某种方式进行比较。我如何解决这个问题,以便他们可以点击按钮,如果他们想要的日期范围是显示的默认日期?

1 个答案:

答案 0 :(得分:1)

这听起来像是一个类型问题。

比较Date类型时,它们会通过函数number转换为valueOf()。将Stringnumber进行比较似乎总是返回false。这可能是为什么在您再次设置日期之前它不起作用,以便StartDateEndDate成为String类型。

我建议只要坚持使用yyyy-mm-dd格式的字符串。我的意思是,首先将StartDateEndDate声明为字符串而不是日期。

或者您可以使用以下内容解析输入和/或setValues函数中的日期:

parseDate(dateString: string): Date {
    if (dateString) {
        return new Date(dateString);
    } else {
        return null;
    }
} 
相关问题