JavaScript의 Date 객체는 언어에 기본으로 내장된 데이터 타입입니다. Date 객체는 아래와 같이 new Date() 생성자를 사용하여 만들 수 있습니다.
Date 객체가 한 번 생성되면 다양한 메서드를 통해 해당 객체를 조작할 수 있습니다. 대부분의 메서드는 현지 시간(local time) 또는 UTC(협정 세계시, GMT)를 기준으로 객체의 연도, 월, 일, 시, 분, 초, 밀리초 필드를 가져오거나 설정하는 역할을 합니다.
Date 객체의 setUTCDate() 함수는 '일(day of month)'을 나타내는 정수를 인수로 받아, 현재 날짜 값을 UTC(세계 표준시) 기준으로 대체합니다.
문법(Syntax)
setUTCDate() 메서드의 기본 문법은 다음과 같습니다.
dateObj.setUTCDate(19);
예제 1: 기존 날짜 변경하기
다음 예제에서는 생성된 Date 객체의 날짜를 setUTCDate()로 변경하는 과정을 보여줍니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var dateObj = new Date('September 26, 89 12:4:25:96');
document.write("Current date: "+dateObj.toUTCString());
document.write("<br>");
dateObj.setUTCDate(30);
document.write("Modified date: "+dateObj.toUTCString());
</script>
</body>
</html>실행 결과
Current date: Tue, 26 Sep 1989 06:34:25 GMT Modified date: Sat, 30 Sep 1989 06:34:25 GMT
위 결과에서 볼 수 있듯이, setUTCDate(30)을 호출하면 기존의 26일이 UTC 기준 30일로 변경되고, 연도·월·시간 값은 그대로 유지됩니다.
예제 2: 날짜가 없는 Date 객체에 일 설정하기
Date 객체를 생성할 때 '일' 정보를 지정하지 않았더라도, setUTCDate() 함수를 사용하면 나중에 원하는 날짜를 설정할 수 있습니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var dateObj = new Date('September, 1989 00:4:00');
dateObj.setUTCDate(2);
document.write("<br>");
document.write(dateObj.getUTCDate());
</script>
</body>
</html>실행 결과
2
예제 3: 빈 생성자로 만든 객체에 UTC 날짜 설정하기
마찬가지로 생성자에 아무 값도 전달하지 않고 Date 객체를 만든 경우에도 이 함수를 사용해 UTC 날짜를 설정할 수 있습니다. 이때 월(month)과 연도(year) 값은 현재 날짜의 값이 그대로 유지됩니다.
<html>
<head>
<title>JavaScript Example</title>
</head>
<body>
<script type="text/javascript">
var dateObj = new Date();
dateObj.setUTCDate(2);
document.write("<br>");
document.write("UTC month: "+dateObj.getUTCMonth());
document.write("<br>");
document.write("UTC date: "+dateObj.getUTCDate());
document.write("<br>");
document.write("UTC fullyear: "+dateObj.getUTCFullYear());
</script>
</body>
</html>실행 결과
UTC month: 9 UTC date: 2 UTC full year: 2018
정리
setUTCDate()는 UTC 기준으로 날짜(일)만 교체하며, 월과 연도에는 영향을 주지 않습니다. 참고로 getUTCMonth()는 0부터 시작하므로 위 출력에서 '9'는 실제로 10월을 의미합니다. 서버와 클라이언트 간 시간대 차이로 인한 오류를 방지하고 싶다면 현지 시간 기반 메서드(setDate) 대신 UTC 기반 메서드를 사용하는 것이 안전합니다.