|
1 | 1 | export function useOutputDuration() { |
2 | 2 | function durationToMinutes(duration: string): number { |
3 | | - let hours = 0 |
4 | | - let minutes = 0 |
5 | | - if (duration.includes(':')) { |
6 | | - hours = +duration.substring(0, duration.indexOf(':')).trim() |
7 | | - minutes = +duration.substring(duration.indexOf(':') + 1).trim() |
| 3 | + let hours = 0; let minutes = 0 |
| 4 | + const lowerDuration = duration.toLowerCase() |
| 5 | + |
| 6 | + if (lowerDuration.includes(':')) { |
| 7 | + [hours, minutes] = lowerDuration.split(':').map(part => +part.trim()) |
8 | 8 | } |
9 | 9 | else { |
10 | | - let durationString = duration |
11 | | - if (duration.includes('h')) { |
12 | | - hours = +duration.substring(0, duration.indexOf('h')).trim() |
13 | | - durationString = duration.substring(duration.indexOf('h') + 1) |
| 10 | + if (lowerDuration.includes('h')) { |
| 11 | + hours = +lowerDuration.split('h')[0].trim() |
| 12 | + const remainder = lowerDuration.split('h')[1] || '' |
| 13 | + |
| 14 | + if (remainder.includes('m')) |
| 15 | + minutes = +remainder.split('m')[0].trim() |
| 16 | + else if (/^\d+$/.test(remainder)) |
| 17 | + minutes = +remainder |
| 18 | + } |
| 19 | + else if (lowerDuration.includes('m')) { |
| 20 | + minutes = +lowerDuration.split('m')[0].trim() |
| 21 | + } |
| 22 | + else if (/^\d+$/.test(lowerDuration)) { |
| 23 | + minutes = +lowerDuration |
14 | 24 | } |
15 | | - if (durationString.includes('m')) |
16 | | - minutes = +durationString.substring(0, durationString.indexOf('m')).trim() |
17 | | - if (durationString === durationString.replace(/\D/g, '')) |
18 | | - minutes = +durationString |
19 | 25 | } |
| 26 | + |
20 | 27 | return hours * 60 + minutes |
21 | 28 | } |
22 | 29 |
|
23 | 30 | function formattedDuration(duration: string): string { |
24 | 31 | const minutes = durationToMinutes(duration) |
| 32 | + const hours = Math.trunc(minutes / 60) |
| 33 | + const remainingMinutes = minutes % 60 |
25 | 34 |
|
26 | | - const stunden = Math.trunc(minutes / 60) |
27 | | - const minuten = minutes % 60 |
28 | | - |
29 | | - let result = '' |
30 | | - |
31 | | - if (stunden > 0) |
32 | | - result = `${result} ${stunden}h` |
33 | | - if (minuten > 0) |
34 | | - result = `${result} ${minuten}m` |
35 | 35 | if (minutes === 0) |
36 | | - result = '0' |
37 | | - |
38 | | - if (result.length === 0) |
39 | | - result = duration |
40 | | - return result.trim() |
| 36 | + return '0' |
| 37 | + return `${hours > 0 ? `${hours}h` : ''}${hours > 0 && remainingMinutes > 0 ? ' ' : ''}${remainingMinutes > 0 ? `${remainingMinutes}m` : ''}` |
41 | 38 | } |
42 | 39 |
|
43 | 40 | return { durationToMinutes, formattedDuration } |
|
0 commit comments