diff options
Diffstat (limited to 'client/src/app/shared/shared-main/angular/from-now.pipe.ts')
-rw-r--r-- | client/src/app/shared/shared-main/angular/from-now.pipe.ts | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/client/src/app/shared/shared-main/angular/from-now.pipe.ts b/client/src/app/shared/shared-main/angular/from-now.pipe.ts new file mode 100644 index 000000000..9851468ee --- /dev/null +++ b/client/src/app/shared/shared-main/angular/from-now.pipe.ts | |||
@@ -0,0 +1,39 @@ | |||
1 | import { Pipe, PipeTransform } from '@angular/core' | ||
2 | import { I18n } from '@ngx-translate/i18n-polyfill' | ||
3 | |||
4 | // Thanks: https://stackoverflow.com/questions/3177836/how-to-format-time-since-xxx-e-g-4-minutes-ago-similar-to-stack-exchange-site | ||
5 | @Pipe({ name: 'myFromNow' }) | ||
6 | export class FromNowPipe implements PipeTransform { | ||
7 | |||
8 | constructor (private i18n: I18n) { } | ||
9 | |||
10 | transform (arg: number | Date | string) { | ||
11 | const argDate = new Date(arg) | ||
12 | const seconds = Math.floor((Date.now() - argDate.getTime()) / 1000) | ||
13 | |||
14 | let interval = Math.floor(seconds / 31536000) | ||
15 | if (interval > 1) return this.i18n('{{interval}} years ago', { interval }) | ||
16 | if (interval === 1) return this.i18n('{{interval}} year ago', { interval }) | ||
17 | |||
18 | interval = Math.floor(seconds / 2592000) | ||
19 | if (interval > 1) return this.i18n('{{interval}} months ago', { interval }) | ||
20 | if (interval === 1) return this.i18n('{{interval}} month ago', { interval }) | ||
21 | |||
22 | interval = Math.floor(seconds / 604800) | ||
23 | if (interval > 1) return this.i18n('{{interval}} weeks ago', { interval }) | ||
24 | if (interval === 1) return this.i18n('{{interval}} week ago', { interval }) | ||
25 | |||
26 | interval = Math.floor(seconds / 86400) | ||
27 | if (interval > 1) return this.i18n('{{interval}} days ago', { interval }) | ||
28 | if (interval === 1) return this.i18n('{{interval}} day ago', { interval }) | ||
29 | |||
30 | interval = Math.floor(seconds / 3600) | ||
31 | if (interval > 1) return this.i18n('{{interval}} hours ago', { interval }) | ||
32 | if (interval === 1) return this.i18n('{{interval}} hour ago', { interval }) | ||
33 | |||
34 | interval = Math.floor(seconds / 60) | ||
35 | if (interval >= 1) return this.i18n('{{interval}} min ago', { interval }) | ||
36 | |||
37 | return this.i18n('just now') | ||
38 | } | ||
39 | } | ||