mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-12-29 16:16:02 +00:00
54 lines
1.2 KiB
TypeScript
54 lines
1.2 KiB
TypeScript
import { containsOnlyDigits } from '@utils/string';
|
|
|
|
function recursiveTimeToSeconds(
|
|
timeArray: string[],
|
|
index: number = 0
|
|
): number {
|
|
if (index >= timeArray.length) {
|
|
return 0;
|
|
}
|
|
|
|
const multipliers = [3600, 60, 1];
|
|
return (
|
|
Number(timeArray[index]) * multipliers[index] +
|
|
recursiveTimeToSeconds(timeArray, index + 1)
|
|
);
|
|
}
|
|
|
|
function compute(timeArray: string[], lineNumber: number): string {
|
|
if (timeArray[0] == '') {
|
|
return '';
|
|
}
|
|
if (timeArray.length > 3) {
|
|
throw new Error(`Time contains more than 3 parts on line ${lineNumber}`);
|
|
}
|
|
|
|
const normalizedArray = [...timeArray, '0', '0'];
|
|
|
|
normalizedArray.forEach((time, index) => {
|
|
if (!containsOnlyDigits(time)) {
|
|
throw new Error(
|
|
`Time doesn't contain valid ${
|
|
['hours', 'minutes', 'seconds'][index]
|
|
} on line ${lineNumber}`
|
|
);
|
|
}
|
|
});
|
|
|
|
return recursiveTimeToSeconds(timeArray).toString();
|
|
}
|
|
|
|
export function convertTimetoSeconds(input: string): string {
|
|
const result: string[] = [];
|
|
|
|
const lines = input.split('\n');
|
|
|
|
lines.forEach((line, index) => {
|
|
const timeArray = line.split(':');
|
|
const seconds = compute(timeArray, index + 1);
|
|
result.push(seconds);
|
|
});
|
|
|
|
return result.join('\n');
|
|
}
|