blob: dffd912f35e98d71ce87449339a18e7fad4f43a6 (
plain)
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
|
const metrics = [
{ name: 'minute', ratio: 60 },
{ name: 'hour', ratio: 60 },
{ name: 'day', ratio: 24 },
{ name: 'week', ratio: 7 },
{ name: 'month', ratio: 4 },
{ name: 'year', ratio: 12 }
];
const PRECISION = 0.75;
const resolve = (value: number, metricIndex = 0): string => {
// Recursively divide value until it's ready to be presented as a string
const metric = metrics[metricIndex];
const nextMetric = metrics[metricIndex + 1];
const newValue = value / metric.ratio;
if (newValue < nextMetric.ratio * PRECISION) {
const rounded = Math.round(newValue);
const isPlural = rounded > 1;
const count = isPlural ? rounded : 'a';
const ending = isPlural ? 's' : '';
return `${count} ${metric.name}${ending} ago`;
}
return resolve(newValue, metricIndex + 1);
};
const compactDateString = (date: Date): string => {
const now = new Date();
const diff = (now.valueOf() - date.valueOf()) / 1000;
return resolve(diff);
};
export default compactDateString;
|