1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
|
import { Pipe, PipeTransform } from '@angular/core';
import _ from 'lodash';
import moment from 'moment';
moment.updateLocale('en', {
relativeTime: {
future: $localize`in %s`,
past: $localize`%s ago`,
s: $localize`a few seconds`,
ss: $localize`%d seconds`,
m: $localize`a minute`,
mm: $localize`%d minutes`,
h: $localize`an hour`,
hh: $localize`%d hours`,
d: $localize`a day`,
dd: $localize`%d days`,
w: $localize`a week`,
ww: $localize`%d weeks`,
M: $localize`a month`,
MM: $localize`%d months`,
y: $localize`a year`,
yy: $localize`%d years`
}
});
@Pipe({
name: 'relativeDate',
pure: false
})
export class RelativeDatePipe implements PipeTransform {
/**
* Convert a time into a human readable form, e.g. '2 minutes ago'.
* @param {Date | string | number} value The date to convert, should be
* an ISO8601 string, an Unix timestamp (seconds) or Date object.
* @param {boolean} upperFirst Set to `true` to start the sentence
* upper case. Defaults to `true`.
* @return {string} The time in human readable form or an empty string
* on failure (e.g. invalid input).
*/
transform(value: Date | string | number, upperFirst = true): string {
let date: moment.Moment;
if (_.isNumber(value)) {
date = moment.unix(value);
} else {
date = moment(value);
}
if (!date.isValid()) {
return '';
}
let relativeDate: string = date.fromNow();
if (upperFirst) {
relativeDate = _.upperFirst(relativeDate);
}
return relativeDate;
}
}
|