mirror of
https://github.com/iib0011/omni-tools.git
synced 2025-12-29 16:16:02 +00:00
feat: convert-time-to-seconds
This commit is contained in:
53
src/pages/tools/time/convert-time-to-seconds/service.ts
Normal file
53
src/pages/tools/time/convert-time-to-seconds/service.ts
Normal file
@@ -0,0 +1,53 @@
|
||||
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');
|
||||
}
|
||||
Reference in New Issue
Block a user