이번 글에서는 '05:00 PM'처럼 오전/오후 표기가 포함된 12시간제 시간 문자열을 입력받아 '17:00' 형태의 24시간제 문자열로 변환하는 JavaScript 함수를 작성하는 방법을 알아보겠습니다.
문제 정의
변환 대상이 되는 시간 문자열은 항상 아래와 같은 형식으로 주어진다고 가정합니다.
const timeStr = '05:00 PM';
즉, 문자열 형식은 항상 HH:MM mm으로 고정되어 있으며, 함수는 이 문자열을 가공하여 다음과 같은 24시간제 형식(HH:MM)의 결과를 반환해야 합니다.
예시
위 문자열에 대한 기대 출력은 다음과 같습니다.
const output = '17:00';
변환 로직의 핵심 규칙
12시간제를 24시간제로 바꿀 때 기억해야 할 규칙은 크게 두 가지입니다.
- 오전(AM) 12시는 자정을 의미하므로
00으로 변환해야 합니다. - 오후(PM)인 경우에는 시간 값에 12를 더해 줍니다. 참고로 오후 12시(정오)는 먼저
'00'으로 바뀐 뒤 12가 더해지므로, 별도의 추가 처리 없이도12로 올바르게 계산됩니다.
구현 코드
const timeStr = '05:00 PM';
const secondTimeStr = '11:42 PM';
const convertTime = timeStr => {
const [time, modifier] = timeStr.split(' ');
let [hours, minutes] = time.split(':');
// 자정(오전 12시) 처리
if (hours === '12') {
hours = '00';
}
// 오후(PM)인 경우 12를 더함
if (modifier === 'PM') {
hours = parseInt(hours, 10) + 12;
}
return `${hours}:${minutes}`;
};
console.log(convertTime(timeStr));
console.log(convertTime(secondTimeStr));실행 결과
위 코드를 실행하면 콘솔에 다음과 같이 출력됩니다.
17:00 23:42
동작 원리 정리
split(' ')을 사용해 시간 부분('05:00')과 오전/오후 표시('PM')를 분리합니다.split(':')으로 시(hours)와 분(minutes)을 나눕니다.- 시간이 '12'라면 자정 또는 정오를 의미하므로 우선 '00'으로 변경합니다.
- 오후(PM) 표시가 있다면 시간에 12를 더해 24시간제로 변환합니다.
- 템플릿 리터럴을 활용해 최종 결과 문자열을 조립한 뒤 반환합니다.
이처럼 간단한 문자열 분리와 조건 분기만으로도 12시간제와 24시간제 사이의 변환을 손쉽게 구현할 수 있습니다. 실무에서는 이 로직을 유틸리티 함수로 만들어 두면 다양한 프로젝트에서 재사용하기에 매우 유용합니다.