1 | 1 | 'use strict'; |
2 | | |
3 | 1 | function format(diff, divisor, name, prev) { |
4 | 31 | var val = Math.floor(diff / divisor); |
5 | 31 | return val <= 1 ? prev : val + ' ' + name + 's ago'; |
6 | | } |
7 | | |
8 | 1 | function ago(date) { |
9 | | |
10 | 33 | var diff = Math.abs(Date.now() - date.getTime()); |
11 | | |
12 | 33 | if (diff < 60000) { // less than a minute |
13 | 2 | return 'just now'; |
14 | | } |
15 | | |
16 | 31 | for (var i = 0; i < ago.units.length; i++) { |
17 | 109 | if (diff < ago.units[i].max) { |
18 | 31 | return format(diff, ago.units[i].value, ago.units[i].name, ago.units[i].prev); |
19 | | } |
20 | | } |
21 | | |
22 | | } |
23 | | |
24 | 1 | ago.units = [ |
25 | | { max: 2760000, value: 60000, name: 'minute', prev: 'a minute ago' }, // max: 46 minutes |
26 | | { max: 72000000, value: 3600000, name: 'hour', prev: 'an hour ago' }, // max: 20 hours |
27 | | { max: 518400000, value: 86400000, name: 'day', prev: 'yesterday' }, // max: 6 days |
28 | | { max: 2419200000, value: 604800000, name: 'week', prev: 'last week' }, // max: 28 days |
29 | | { max: 28512000000, value: 2592000000, name: 'month', prev: 'last month' }, // max: 11 months |
30 | | { max: Infinity, value: 31536000000, name: 'year', prev: 'last year' } |
31 | | ]; |
32 | | |
33 | 1 | module.exports = ago; |