|
1 | 1 | import { NumberFormatter } from './../../formatters/number.formatter';
|
2 | 2 | import { Pipe, PipeTransform } from '@angular/core';
|
3 | 3 | import * as moment from 'moment';
|
4 |
| -import { DATE_FORMAT_YEAR } from 'src/environments/environment'; |
5 | 4 | @Pipe({
|
6 | 5 | name: 'substractDate'
|
7 | 6 | })
|
8 | 7 | export class SubstractDatePipe implements PipeTransform {
|
9 | 8 |
|
10 | 9 | transform(fromDate: Date, substractDate: Date, displaySeconds: boolean = false): string {
|
11 | 10 |
|
12 |
| - if (fromDate === null || substractDate === null ) { |
| 11 | + if (fromDate === null || substractDate === null) { |
13 | 12 | return '--:--';
|
14 | 13 | }
|
15 | 14 |
|
16 |
| - const startDate = moment(substractDate, `${DATE_FORMAT_YEAR} HH:mm:ss`); |
17 |
| - let endDate = moment(fromDate, `${DATE_FORMAT_YEAR} HH:mm:ss`); |
18 |
| - let duration: moment.Duration = moment.duration(endDate.diff(startDate)); |
| 15 | + const startDate = moment(substractDate); |
| 16 | + const endDate = moment(fromDate); |
| 17 | + let duration = this.getTimeDifference(startDate, endDate); |
| 18 | + const lessThanMinute = duration.asSeconds() < 60 || displaySeconds; |
19 | 19 |
|
20 |
| - if (duration.asSeconds() > 60 && !displaySeconds) { |
21 |
| - endDate = endDate.add(1, 'minute').startOf('minute'); |
22 |
| - duration = moment.duration(endDate.diff(startDate)); |
23 |
| - return `${ this.formatTime(duration.hours())}:${this.formatTime(duration.minutes()) }`; |
24 |
| - } else { |
25 |
| - return `${ this.formatTime(duration.hours())}:${this.formatTime(duration.minutes())}:${this.formatTime(duration.seconds())}`; |
| 20 | + if (!lessThanMinute) { |
| 21 | + const newStartDate = startDate.clone().seconds(0).milliseconds(0); |
| 22 | + const newEndDate = endDate.clone().seconds(0).milliseconds(0); |
| 23 | + duration = this.getTimeDifference(newStartDate, newEndDate); |
26 | 24 | }
|
| 25 | + |
| 26 | + return this.displayDifference(duration, lessThanMinute); |
| 27 | + } |
| 28 | + |
| 29 | + getTimeDifference(substractDate: moment.Moment, fromDate: moment.Moment): moment.Duration { |
| 30 | + return moment.duration(fromDate.diff(substractDate)); |
| 31 | + } |
| 32 | + |
| 33 | + displayDifference(duration: moment.Duration, lessThanMinute) { |
| 34 | + const daysInHours = duration.days() >= 1 ? duration.days() * 24 : 0; |
| 35 | + const hours = this.formatTime(duration.hours() + daysInHours); |
| 36 | + const minutes = this.formatTime(duration.minutes()); |
| 37 | + const seconds = lessThanMinute ? `:${this.formatTime(duration.seconds())}` : ''; |
| 38 | + return `${hours}:${minutes}${seconds}`; |
27 | 39 | }
|
28 | 40 |
|
29 | 41 | formatTime(time: number): string {
|
30 | 42 | return new NumberFormatter(time).getAsAtLeastTwoDigitString();
|
31 | 43 | }
|
32 |
| - |
33 | 44 | }
|
0 commit comments