为什么两个JS日期对象实例化不同?

Ale*_*ene 7 javascript date typescript

我想基于日期选择器启用/禁用按钮,我有一个像这样的检查设置:

  public dateChanged = false;
  public availableFromDate: Date;
  public availableToDate: Date;

 initDatepickers() {
    const currentDay = new Date();
    this.availableFromDate = currentDay;
    this.availableToDate = currentDay;
  }

 private dateCheck() {
    if ((this.availableFromDate > this.availableToDate) || (this.availableFromDate === this.availableToDate)) {
      this.dateChanged = false;
    } else {
      this.dateChanged = true;
    }
    console.log(this.dateChanged);
    console.log(`Available from - ${this.availableFromDate}`);
    console.log(`Available to - ${this.availableToDate}`);
  }
Run Code Online (Sandbox Code Playgroud)

检查工作正常,但是从日期开始时按钮启用了!如果将值记录到控制台,则禁用按钮,因为init值为false,而不是因为检查有效.

两个日期对象的初始化方式不同(console.log dump):

true
clinics-upload-documents.component.ts:73 Available from - Fri Feb 22 2019 00:00:00 GMT+0100 (Central European Standard Time)
clinics-upload-documents.component.ts:74 Available to - Fri Feb 22 2019 10:52:31 GMT+0100 (Central European Standard Time)
Run Code Online (Sandbox Code Playgroud)

它永远不会是假的,因为第一个日期obj是@ 0:00:00但是第二个日期与当前的当地时间相关联.

这些用于操纵日期:

onFromChange(fromDate) {
  const dateType = 'from';
  this.setDateValues(fromDate, dateType);
}
onToChange(toDate) {
  const dateType = 'to';
  this.setDateValues(toDate, dateType);
}
private setDateValues(date: Date, dateType: string) {
  dateType === 'from' ? this.availableFromDate = new Date(date) : this.availableToDate = new Date(date);
  this.dateCheck();
}
Run Code Online (Sandbox Code Playgroud)

我错过了什么?

Sal*_*n A 3

改变这个:

const currentDay = new Date();
this.availableFromDate = currentDay;
this.availableToDate = currentDay;
Run Code Online (Sandbox Code Playgroud)

对此:

const currentDay = new Date();
currentDay.setHours(0, 0, 0, 0);
this.availableFromDate = new Date(currentDay);
this.availableToDate = new Date(currentDay);
Run Code Online (Sandbox Code Playgroud)

这会将时间部分清零并使日期比较直接进行。

接下来,更改此:

if (
   (this.availableFromDate > this.availableToDate) ||
   (this.availableFromDate === this.availableToDate)
)
Run Code Online (Sandbox Code Playgroud)

为此(假设您要检查大于或等于):

if (this.availableFromDate >= this.availableToDate)
Run Code Online (Sandbox Code Playgroud)

尽管可以使用 来比较两个日期,===但您无法比较它们< <= >= >