【问题标题】:Display difference between two dates显示两个日期之间的差异
【发布时间】:2020-05-11 17:11:43
【问题描述】:

我正在使用 Angular JS 8 开发一个项目,我愿意稍微简化我正在做的工作。这是交易:

我正在从后端检索数据,如下所示:

[{
    "id": "1",
    "start_time": "2020-01-12T10:00:000Z",
    "end_time": "2020-01-12T12:00:000Z"
},
{
    "id": "2",
    "start_time": "2020-01-15T11:30:000Z",
    "end_time": "2020-01-15T14:00:000Z"
},
{
    "id": "3",
    "start_time": "2020-01-19T12:00:000Z",
    "end_time": "2020-01-19T18:40:000Z"
}]

我需要在普通表中显示 end_time 和 start_time 之间的差异,如下所示:

id | start - end (time)
1  |  2 hours and 00 min
2  |  2 hours and 30 min
3  |  6 hours and 40 min

我在我的控制器中使用 moment.js 来计算这两个日期之间的差异,但我想知道是否有更好的方法可以直接在 HTML 中执行此操作,而不是迭代检索到的数据并执行此操作。

【问题讨论】:

  • 您使用的是 AngularJs (1.x) 还是 Angular (>2)?
  • 我正在使用 Angular 8
  • 我不这么认为,我想找到一种仅使用 HTML 轻松完成的方法。
  • 您可以使用管道来执行此操作(请参阅docs about pipes)。我相当肯定您不会找到仅 HTML 的解决方案。

标签: angular angular8


【解决方案1】:

好的,我最终创建了一个如下所示的自定义管道:

import { Pipe, PipeTransform } from '@angular/core';

@Pipe({
  name: 'substractDate'
})
export class SubstractDatePipe implements PipeTransform {

  transform(fromDate: Date, substractDate: Date): string {
    const difference = fromDate.valueOf() - substractDate.valueOf();

    const minutes = Math.floor((difference / (1000 * 60)) % 60);
    const hours = Math.floor(difference / (1000 * 60 * 60) % 24);

    return `${this.formatTime(hours)}:${this.formatTime(minutes)}`;
  }

  formatTime(time: number): string {
    const formattedTime = (time < 10) ? '0' + time : time.toString();
    return formattedTime;
  }

}

【讨论】:

    猜你喜欢
    • 2023-03-26
    • 2017-12-27
    • 2011-10-29
    • 1970-01-01
    • 1970-01-01
    • 2014-02-12
    • 2015-09-14
    • 2015-06-21
    • 2020-02-06
    相关资源
    最近更新 更多