달나라 노트

Google Apps Script : 날짜/시간 수정하기, 날짜/시간 빼기, 날짜/시간 더하기, 날짜/시간 지정하기 (날짜/시간 연산, setFullYear, setMonth, setDate, setHours, setMinutes, setSeconds) 본문

Google Apps Script

Google Apps Script : 날짜/시간 수정하기, 날짜/시간 빼기, 날짜/시간 더하기, 날짜/시간 지정하기 (날짜/시간 연산, setFullYear, setMonth, setDate, setHours, setMinutes, setSeconds)

CosmosProject 2022. 11. 21. 03:03
728x90
반응형

 

 

 

GAS에서는 날짜 객체에서 특정 요소(e.g. 년, 월, 일, 시간, 분, 초)들을 원하는대로 변경할 수 있는 함수입니다.

 

예를들어 2022-11-20 20:13:56 라는 날짜 객체가 있으면

여기서 년도를 2025년으로 변경한다거나

시간을 19시로 바꾼다거나 등의 기능인 것이죠.

 

 

Syntax

DateTime.setFullYear(number)
DateTime.setMonth(number)
DateTime.setDate(number)
DateTime.setHours(number)
DateTime.setMinutes(number)
DateTime.setSeconds(number)

 

사용법은 위와 같습니다.

날짜 객체에 위 method들을 적용시켜 원하는 숫자를 전달해주면 됩니다.

 

 

하나씩 알아봅시다.

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setFullYear(2030);
  Logger.log(now);
}

 

위 코드는 현재 시점을 얻어오고 현재 시점의 년도를 2030으로 설정하는 코드입니다.

 

 

 

결과를 보면 현재 시간을 나타내는 첫 번째 줄에서

년도만 2030년으로 바뀐 것을 알 수 있습니다.

 

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setMonth(11);
  Logger.log(now);
}

 

이번에는 setMonth() 입니다.

 

 

결과를 보면 현재는 11월이며 setMonth(11)의 결과로 월만 12월(Dec)로 바뀐 것을 볼 수 있습니다.

 

근데 한 가지 이상한 점이 있습니다.

분명히 코드에서는 now.setMonth(11)이라고 적었는데 왜 11월이 아닌 12월로 설정이 된 것일까요?

 

GAS는 Javascript를 기반으로 한 언어입니다.

근데 Javascript에서는 1월과 0이 대응됩니다.

즉, 0은 1월을 의미하며, 1은 2월을 의미하고 11은 12월을 의미합니다.

따라서 Javascript를 기반으로 한 GAS에서도 월에 대한 번호는 0부터 시작한다는 것을 알 수 있죠.

 

물론 실제 date 객체에서 날짜를 표시할 때에는 우리가 아는 1월 ~ 12월로 표시가 됩니다.

다만 월요일을 1이라는 weekday number로 대응하여 나타내듯이 1월을 0이라는 숫자로 대응한다고 보시면 됩니다.

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setDate(25);
  Logger.log(now);
}

 

이번에는 setDate입니다.

 

 

현재 시점에서 일이 21일인데 여기서 일만 25일로 바뀐 것을 볼 수 있습니다.

 

즉, 날짜가 2022-11-21에서 2022-11-25로 바뀐 것이죠.

2022-11-25는 금요일이므로 요일도 Mon에서 Fri로 바뀌어 표시되는 것을 알 수 있습니다.

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);
  
  now.setDate(40);
  Logger.log(now);
}

 

위 코드를 봅시다.

setDate() method로 날짜를 40으로 설정했습니다.

 

근데 일은 아무리 많아봤자 31일까지인데 40이란 숫자는 어떤식의 결과를 return할까요?

 

위 결과를 봅시다.

 

현재 날짜는 2022-11-21입니다.

근데 여기서 일을 40으로 바꾸면 2022-11-40이 됩니다.

 

근데 이런 날짜는 없죠.

즉, 이렇게 존재하지 않는 날짜나 시간 데이터로 변경될 경우 이를 환산하여 보여줍니다.

 

11월은 30일까지 있으므로 11월 40일은 11월을 모두 넘기고도 10일이 남습니다.

즉, 월을 하나 넘겨서 12월 10일이 되는 것이죠.

 

그래서 위 결과를 보면 2022-12-10으로 나타내어지는 것을 볼 수 있습니다.

 

이는 Date 객체를 나타내는 것에 대한 규칙입니다.

위처럼 정상 범위를 넘어선 날짜/시간 데이터에 대해서는 그 초과분을 올림하여 정상적인 날짜로 나타내주는 것이죠.

이는 아래에서 설명할 날짜, 시간, 분, 초 등 모든 곳에서 성립합니다.

 

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);
  
  now.setHours(19);
  Logger.log(now);
}

 

setHours() method를 이용해 현재 시간을 19시로 설정하고 있습니다.

 

 

결과를 보면 현재 시간에서 시간만 19로 바뀐 것을 볼 수 있습니다.

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);
  
  now.setHours(30);
  Logger.log(now);
}

 

setHours()도 setMonth()에서 설명했던 것 처럼 0~23시 까지가 존재하는데 이를 넘어서는 30을 넣어봤습니다.

 

 

 

아마 어느정도 결과를 짐작하셨을겁니다.

 

30시라는 시간은 없습니다.

최대 시간은 24시간이므로 30시에서 24시간을 빼고 남은 시간은 6시간입니다.

따라서 24시간은 1일로 환산되며 남은 6시간이 표시됩니다.

 

즉, 2022-11-21 03:42:16에서 날짜는 하루가 증가하는 22일이 되며 시간은 6시로 표시됩니다.

 

 

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);
  
  now.setMinutes(23);
  Logger.log(now);
}

 

setMinutes() method를 이용해서 분 데이터를 바꾸고 있습니다.

 

 

setMinutes(23)은 분단위를 23으로 바꿉니다.

 

따라서 44분이던 분이 23으로 바뀐 것을 볼 수 있습니다.

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);
  
  now.setMinutes(70);
  Logger.log(now);
}

 

 

setMinutes(70) 처럼 분으로 표시될 수 있는 최대치인 59분을 넘어설 경우 이를 환산합니다.

현재 45분을 70분으로 설정합니다.

 

그러면 3시 70분 6초가 됩니다.

하지만 이러한 시간 표기는 존재하지 않으므로 초과분을 환산합니다.

따라서 4시 10분 6초가 되는것이죠.

 

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setSeconds(45);
  Logger.log(now);
}

 

이번에는 setSeconds() method 입니다.

위 예시는 setSeconds() method를 이용해 시간 데이터에서 초를 45초로 바꾸는 코드입니다.

 

 

 

보시면 초만 36초에서 45초로 변경된 것을 알 수 있습니다.

 

 

 

 

 

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setSeconds(70);
  Logger.log(now);
}

 

 

setSeconds(70)은 초를 70초로 설정한다는 의미입니다.

그러면 3시 47분 30초인 시간을 3시 47분 70초로 만든다는 의미이죠.

 

근데 초단위가 70초인 시간 표기는 없습니다. 그러면 이를 환산해야겠죠.

 

3시 47분 70초는 3시 48분 10초이므로 위 결과에서 표시된 내용을 보면 03:48:10으로 표기되는 것을 볼 수 있습니다.

 

 

 

 

 

 

 

 

 

 

 

번외로 set~~ method들과 get~~ method들을 이용하면 특정 날짜/시간 데이터에서 날짜를 며칠 더한다던지, 시간을 몇시간 더한다던지 등의 연산이 가능합니다.

 

get~~ method = https://cosmosproject.tistory.com/701

 

Google Apps Script : 날짜/시간의 특정 요소 얻기 (getFullYear, getMonth, getDate, getHours, getMinutes, getSeconds)

GAS에서는 날짜/시간 객체에 담긴 요소들을 얻어올 수 있는 함수입니다. 예를들어 2022-11-20 20:13:56 라는 날짜 객체가 있으면 여기서 년도인 2022년을 얻어온다거나, 시간인 20을 얻어온다거나 하는

cosmosproject.tistory.com

 

아래 예시를 보시죠.

 

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setDate(now.getDate() + 10);
  Logger.log(now);
}

 

위 코드는 현재 날짜로부터 10일 후의 날짜를 출력해주는 코드입니다.

 

 

- now.setDate(now.getDate + 10);

이 부분이 가장 중요한 부분입니다.

 

now.setDate() method를 이용해서 현재 시점에서 날짜 정보를 바꿀겁니다.

 

근데 바꿀 날짜 정보는 바로 now.getDate() + 10 이것이죠.

현재 날짜/시간 정보를 담은 now에서 getDate() method를 이용해 현재 일 정보를 얻어옵니다.

그리고 거기에 10을 더하죠.

 

그리고 10이 더해진 일을 now의 일로 설정하는 겁니다.

 

 

 

결과를 봅시다.

 

현재 날짜는 2022-11-21입니다.

 

여기에 10일을 더하면 2022-11-31입니다.

 

근데 11월은 30일까지만 있죠.

따라서 위 날짜를 환산하면 2022-12-01인 것입니다.

 

그래서 위 결과를 보면 오늘로부터 10일이 더해진 2022-12-01로 표시되는 것을 볼 수 있죠.

 

 

 

 

이러한 방식으로 년, 월, 일, 시, 분, 초 모두에 대해서 연산을 할 수 있습니다.

 

 

 

 

 

하나의 예시만 간단하게 봅시다.

 

function myFunction() {
  var now = new Date();
  Logger.log(now);

  now.setHours(now.getHours() + 5);
  Logger.log(now);
}

 

위 코드를 보면 현재 시점에서 5시간을 더한 값을 출력하라는 의미인 것을 알 수 있습니다.

 

 

 

결과를 보면 현재 시간은 3시 53분 41초이며

5시간이 더해진 8시 53분 41초가 출력되는 것을 볼 수 있습니다.

 

 

 

 

 

 

728x90
반응형
Comments