date_isodate_set() 함수란?
PHP의 date_isodate_set() 함수는 DateTime 객체에 ISO-8601 표준 형식으로 날짜를 설정합니다. 즉, 연도·주·요일 세 가지 값을 기준으로 원하는 날짜를 지정할 수 있습니다. 이 함수는 절차형(procedural) 스타일이며, 객체지향 방식에서는 동일한 기능을 하는 DateTime::setISODate() 메서드를 사용합니다.
함수는 실행에 성공하면 NULL을 반환하고, 실패하면 FALSE를 반환합니다.
구문
date_isodate_set(object, year, week, day)
매개변수
object − 날짜를 설정할 DateTime 객체입니다.
year − 설정하려는 날짜의 연도입니다.
week − 설정하려는 날짜의 주(ISO 주차)입니다.
day − 해당 주의 요일입니다. 생략할 수 있으며, 기본값은 1(월요일)입니다.
반환값
date_isodate_set() 함수는 성공 시 NULL, 실패 시 FALSE를 반환합니다.
예제 1
다음은 date_isodate_set() 함수와 setISODate() 메서드를 각각 사용해 새로운 날짜를 설정하는 예제입니다.
<?php
$dateSrc = '2018-10-11 11:15 GMT';
$dateTime = date_create($dateSrc);
# date_isodate_set() 함수로 새 날짜 설정
date_isodate_set($dateTime, 2000, 12, 12);
echo "New Formatted date = ". $dateTime->format("Y-m-d\\TH:i:s\\Z");
echo "<br />";
# 두 번째 방법: 객체지향 방식 사용
$dateTime = new DateTime($dateSrc);
$dateTime->setISODate(1999, 10, 12);
echo "New Formatted date is ".
$dateTime->format("Y-m-d\\TH:i:s\\Z");
?>
출력 결과
New Formatted date = 2000-03-31T11:15:00Z New Formatted date is 1999-03-19T11:15:00Z
ISO 연도 2000년의 12주차 시작일(월요일)은 3월 20일이므로, 여기서 12번째 날(11일 후)인 3월 31일이 결과로 출력됩니다. 마찬가지로 1999년 10주차의 12번째 날은 3월 19일입니다. 원래 날짜의 시간 정보(11:15)는 그대로 유지되는 점도 확인할 수 있습니다.
예제 2
다음은 day 매개변수를 생략한 예제입니다. 이 경우 기본값인 월요일(1)이 자동으로 적용됩니다.
<?php $d = date_create(); date_isodate_set($d, 2017, 9); echo date_format($d, "Y-m-d"); ?>
출력 결과
2017-02-27
2017년 9주차의 월요일은 2월 27일이므로 위와 같은 결과가 출력됩니다.
참고 사항
- ISO-8601 표준에서 한 주는 월요일에 시작하여 일요일에 끝납니다.
- day 값은 일반적으로 1(월요일)~7(일요일) 범위를 사용하지만, 범위를 벗어나는 값도 허용되며 초과된 만큼 날짜가 자동으로 계산됩니다.
- 이 함수는 날짜만 변경하며, 기존 DateTime 객체에 설정된 시간 정보는 변경되지 않습니다.