|
1 | 1 | function formatTimestamp( |
2 | 2 | /** @type number | string */ timestamp, |
3 | | - /** @type boolean */ show_year, |
| 3 | + /** @type boolean */ showYear, |
4 | 4 | ) { |
5 | 5 | if (timestamp) { |
6 | 6 | const date = new Date(typeof timestamp === 'number' ? timestamp * 1000 : timestamp); |
7 | 7 | if (!isNaN(date)) { |
8 | 8 | const months = [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ]; |
9 | 9 | const hours = date.getHours(); |
10 | 10 | const minutes = date.getMinutes(); |
11 | | - return `${months[date.getMonth()]} ${date.getDate()}, ${show_year ? date.getFullYear() + ' at ': ''}${(hours % 12) || 12}:${String(minutes).padStart(2, '0')} ${hours / 12 >= 1 ? 'PM' : 'AM'}`; |
| 11 | + return `${months[date.getMonth()]} ${date.getDate()}, ${showYear ? date.getFullYear() + ' at ': ''}${(hours % 12) || 12}:${String(minutes).padStart(2, '0')} ${hours / 12 >= 1 ? 'PM' : 'AM'}`; |
12 | 12 | } |
13 | 13 | } |
14 | 14 | return '--'; |
15 | 15 | } |
16 | 16 |
|
17 | | -function formatDuration(/** @type string */ duration) { |
18 | | - if (!duration) { |
| 17 | +function formatDuration( |
| 18 | + /** @type Date | number | string */ startTime, |
| 19 | + /** @type Date | number | string */ endTime, |
| 20 | +) { |
| 21 | + if (!startTime || !endTime) { |
19 | 22 | return '--'; |
20 | 23 | } |
21 | 24 |
|
22 | | - const [ hour, minute, second ] = duration.split(':'); |
| 25 | + const startDate = new Date(typeof startTime === 'number' ? startTime * 1000 : startTime); |
| 26 | + const endDate = new Date(typeof endTime === 'number' ? endTime * 1000 : endTime); |
| 27 | + const totalSeconds = Math.floor((endDate.getTime() - startDate.getTime()) / 1000); |
| 28 | + |
23 | 29 | let formatted = [ |
24 | | - { value: Number(hour), unit: 'h' }, |
25 | | - { value: Number(minute), unit: 'm' }, |
26 | | - { value: Number(second), unit: 's' }, |
| 30 | + { value: Math.floor(totalSeconds / (3600 * 24)), unit: 'd' }, |
| 31 | + { value: Math.floor((totalSeconds % (3600 * 24)) / 3600), unit: 'h' }, |
| 32 | + { value: Math.floor((totalSeconds % 3600) / 60), unit: 'm' }, |
| 33 | + { value: totalSeconds % 60, unit: 's' }, |
27 | 34 | ].map(({ value, unit }) => value ? `${value}${unit}` : '') |
28 | 35 | .join(' '); |
29 | 36 |
|
|
0 commit comments