【问题标题】:Comparing 2 dates angular比较 2 个日期的角度
【发布时间】:2018-12-30 23:46:46
【问题描述】:

我正在尝试以角度比较 2 个日期。

我的组件如下所示:

@Input() holidays: Holiday[];

 beforeMonthViewRender({ body }: { body: CalendarMonthViewDay[] }): void {
    let plannedHoliday: Holiday[];


    body.forEach(day => {
          plannedHoliday = this.holidays.filter(x => {
               const h = new Date(x.date),
                     d = typeof day.date;
              console.log('Render ' + new Date(x.date) + ' ' + day.date + ' ' +
              (new Date(h.getFullYear(), h.getMonth(), h.getDate()) === new Date(day.date.getFullYear(), day.date.getMonth(), day.date.getDate()));
              return new Date(h.getFullYear(), h.getMonth(), h.getDate()) === new Date(day.date.getFullYear(), day.date.getMonth(), day.date.getDate());
            });
}

和我的服务(仅此问题的相关方法):

  getHolidays(): Observable<Holiday[]> {
    return this.http.get(this._employeeUrl + '/holidays')
      .map(response => response)
      .catch(this.handleError);
  }

我在控制台中得到的是:

渲染 2017 年 3 月 16 日星期四 02:00:00 GMT+0200(东欧标准时间) 2016 年 8 月 8 日星期一 00:00:00 GMT+0300(东欧夏令时间) false 渲染 2016 年 8 月 9 日星期二 07:28:20 GMT+0300(东欧夏令时间) 2016 年 8 月 9 日星期二 00:00:00 GMT+0300(东欧夏令时间) false 渲染 2016 年 8 月 9 日星期二 03:00:00 GMT+0300(东欧夏令时间) 2016 年 8 月 9 日星期二 00:00:00 GMT+0300(东欧夏令时间) false 渲染 2016 年 8 月 10 日星期三 03:00:00 GMT+0300(东欧夏令时间) 2016 年 8 月 9 日星期二 00:00:00 GMT+0300(东欧夏令时间) false 渲染 2016 年 8 月 11 日星期四 03:00:00 GMT+0300(东欧夏令时间) 2016 年 8 月 9 日星期二 00:00:00 GMT+0300(东欧夏令时间) false 渲染 2016 年 8 月 12 日星期五 03:00:00 GMT+0300(东欧夏令时间) 2016 年 8 月 9 日星期二 00:00:00 GMT+0300(东欧夏令时间) false

当我尝试调试它时,我发现来自我的数据库 (mongoDB) 的日期实际上是 JSON 格式,所以在我的应用程序中似乎是字符串。

所以,我无法将字符串与日期进行比较。 正如您现在在我的控制台中看到的那样,日期似乎相同,但时间不一样,所以即使我想查看 2016 年 8 月 8 日 === 2018 年 8 月 8 日,因为时间的值它总是错误的。

我该怎么做才能解决这个问题?

【问题讨论】:

  • 请将您的控制台日志发布为文本,而不是图像。有些人因为代理而看不到 imgur。
  • 尝试使用 setHours(0, 0, 0)
  • 1.如果您可以发布文字,请不要发布图片; 2.尽量减少你的问题(见stackoverflow.com/help/mcve 3.你可以使用moment.js

标签: javascript angular date


【解决方案1】:

您的日期采用 ISO 格式。

只需使用

从中创建新日期
const start = new Date('your string of an ISO date');

然后将其转换为时间戳

const startTS = start.getTime();

它变成了一个非常简单的数字比较。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多