[PHP] 날짜에 맞는 요일을 구하고 텍스트 형식으로 표시하는 방법
다들 잘 아시다시피 PHP 에서 어떤 날짜의 요일을 구하기 위해서는 아래와 같이 date
함수를 사용해야 합니다.
date( 'w', '2025-02-03' );
이렇게 해주면 date
함수가 투입된 날짜에 맞는 요일을 구해서 0~6 까지의 숫자1로 반환을 해주거든요? 위 예시에서는 아마 월요일을 뜻하는 “1“이 반환 될 것입니다.
문제
그런데 정작 사용자에게 요일을 표시하기 위해서 date
함수를 그대로 보여주면, 사용자가 PHP 언어를 이해하지 못 하는 대다수의 경우 이 숫자가 무슨 의미인지 모르니 사용자에게 만큼은 우리에게 익숙한 “월요일” 또는 적어도 “Monday” 라고는 표시를 해줘야 할 것 같아요.
솔루션
1을 월요일이라고 보여주기 위해서는 아래와 같은 방법을 사용할 수 있습니다.
if 문 사용하기
$day = date( 'w', '2025-02-03' );
if ( $day == 0 ) {
return '일요일';
} elseif ( $day == 1 ) {
return '월요일';
}
...
} elseif ( $day == 6 ) {
return '토요일';
}
아 그런데 이건 뭔가 좀 나이스 하지 않죠?
switch 문 사용하기
아래와 같은 방법도 생각해 볼 수 있습니다.
$day = date( 'w', '2025-02-03' );
switch ( $day ) {
case 0 : return '일요일'; break;
case 1 : return '월요일'; break;
....
case 6 : return '토요일'; break;
}
아무래도 if
문 보다는 조금더 “나이스” 해보이긴 하는데, 이것도 그렇게 느낌이 있지는 않아요.
배열 사용하기
그래서 많은 선지자들은 아래와 같이 사용합니다.
$dayStr = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'];
$day = date( 'w', '2025-02-03' );
return $dayStr[$day];
간단하게 위 코드에 대해 설명하자면, $dayStr
이라는 배열을 미리 선언 해놓고 그 안에 각 요일을 일요일부터 순서대로 담아 준 다음 꺼내 사용하는 것입니다.
PHP 배열의 요소는 기본적으로 0
부터 시작을 하니까, $datStr[0]
이라고 하면 일요일이 반환되는 그런 구조가 되니, 여기에 date
함수에 반환 받은 값을 넣어줘서 그 key
에 맞는 텍스트로 된 요일을 반환해주도록 하는 것입니다.
if
나 switch
에 비해 좀 더 나이스 해보이나요?
이를 응용해서 다른 곳에도 잘 활용할 수 있을 것 같습니다.
끝.
참고자료
- date, PHP.net
- 0(일요일)을 시작으로 6(토요일)까지 요일을 반환 ↩