시간을 나타내는 'HH:MM:SS' 형식의 문자열을 입력받아, 해당 시간을 초 단위 숫자로 변환하여 반환하는 함수를 작성해 보겠습니다.
예를 들어 다음과 같이 동작해야 합니다.
countSeconds('12:00:00') // 43200
countSeconds('00:30:10') // 1810구현 아이디어
변환 로직은 매우 간단합니다. 먼저 문자열을 콜론(:) 기준으로 분리(split)하고, 각 부분을 숫자로 변환한 뒤 다음 공식으로 초를 계산합니다.
- 1시간 = 3600초
- 1분 = 60초
즉, (시 × 3600) + (분 × 60) + 초를 계산하면 됩니다.
예제 코드
const timeString = '23:54:43';
const other = '12:30:00';
const withoutSeconds = '10:30';
const countSeconds = (str) => {
const [hh = '0', mm = '0', ss = '0'] = (str || '0:0:0').split(':');
const hour = parseInt(hh, 10) || 0;
const minute = parseInt(mm, 10) || 0;
const second = parseInt(ss, 10) || 0;
return (hour * 3600) + (minute * 60) + second;
};
console.log(countSeconds(timeString));
console.log(countSeconds(other));
console.log(countSeconds(withoutSeconds));실행 결과
콘솔에 출력되는 결과는 다음과 같습니다.
86083 45000 37800
코드 설명
이 코드가 견고하게 동작하는 이유는 다음과 같습니다.
- 구조 분해 할당(Destructuring) 기본값:
[hh = '0', mm = '0', ss = '0']처럼 기본값을 지정했기 때문에,'10:30'처럼 초가 없는 문자열이 입력되어도 오류 없이 처리됩니다. - null/undefined 방어:
(str || '0:0:0')구문으로 인해 입력값이 비어 있거나 null인 경우에도 안전하게 0초를 반환합니다. - parseInt 진법 지정:
parseInt(hh, 10)처럼 진수(radix)를 명시적으로 10으로 지정하면 예기치 않은 파싱 오류를 방지할 수 있습니다. - NaN 방지: 파싱 결과가 NaN일 경우
|| 0이 이를 0으로 대체하여 항상 유효한 숫자를 반환합니다.
이처럼 몇 줄의 코드만으로도 다양한 형식의 시간 문자열을 안정적으로 초 단위로 변환할 수 있습니다.