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

标签 javascript typescript date

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

  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}`);
  }

向上检查效果很好,但是当开始日期较低时启用按钮! 如果您将值记录到控制台,则按钮会被禁用,因为初始值为 false,而不是因为检查有效。

两个日期对象的初始化不同(console.log 转储):

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)

它永远不会是假的,因为第一个日期 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();
}

我错过了什么?

最佳答案

改变这个:

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

对此:

const currentDay = new Date();
currentDay.setHours(0, 0, 0, 0);
this.availableFromDate = new Date(currentDay);
this.availableToDate = new Date(currentDay);

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

接下来,改变这个:

if (
   (this.availableFromDate > this.availableToDate) ||
   (this.availableFromDate === this.availableToDate)
)

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

if (this.availableFromDate >= this.availableToDate)

cannot compare two dates with === 尽管您可以使用 < <= >= > 来比较它们.

关于javascript - 为什么两个 JS 日期对象实例化不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54824615/

相关文章:

typescript - 为什么这个映射类型删除了 `?` 装饰器?我们如何在不删除它的情况下获得类似的结果?

javascript - 通过 AJAX 将 PHP 数据更改为 JS 数据(尤其是数组)时的最佳实践

javascript - 在 if block 中使用 await 时,'await' 对此表达式的类型没有影响

javascript - ReactJS - 将数据从子组件传递到其父组件

Typescript NPM 模块导入导致引用失败

php - 用月、年、星期几和周数计算月中的第几天

Javascript 获取数组中的连续日期

最近 12 个月的 SQL 函数

javascript - 在本地主机上运行时不执行 JSONP 回调

javascript - 如何让我的暗模式开关在每次点击时都能正常工作?