|
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