Web Programming/Thymeleaf, HTML, CCS, JS
Date.toISOString을 한국시간으로 맞추기 (+date 다루기)
Sean-creative
2022. 3. 20. 02:17
1. <input type="date">에 현재 날짜를 기준으로 value값을 변경해주어야 했다.
2. 계약 만료일은 현재 날짜를 기준으로 +2년을 해주어야 한다.
3. 현재 시각은 2022-03-20 01:56:23 인데, ISOString()으로 설정하니까 하루차이가 난다.
1,2,3 을 해결하는 코드만 보면 이렇다.
const offset = new Date().getTimezoneOffset() * 60000;
const date = new Date(Date.now() - offset);
$("input[name=startDate]").attr('value', date.toISOString().substring(0, 10))
date.setFullYear(date.getFullYear()+2)
$("input[name=endDate]").attr('value', date.toISOString().substring(0, 10))
3번에 대해 부가 설명을 해보자면
Date객체가 반환하는 날짜와 toISOString() 함수의 반환값은 다르다.
9시간 차이가 난다.
toISOString함수는 UTC시간을 기준으로 반환하기 때문인데, 그 시간이 한국과 9시간차이의 오프셋을 갖기 때문이다.
UTC시간보다 9시간 더해진 시간이 한국 시간이기 때문에 그 차이를 뺄 필요가 있다.
내가 제작하는 프로젝트에서는 모든 시간을 toISOString이 반환하는 YYYY-MM-DD 형식의 문자열을 사용할 것이기 때문에 오프셋을 변경해야 할 필요가 있고, 이는 Date.prototype.getTimezoneOffset() 함수의 반환값을 통하여 가능하다.
// getTimezoneOffset()은 현재 시간과의 차이를 분 단위로 반환한다.
const offset = new Date().getTimezoneOffset() * 60000;
const date = new Date(Date.now() - offset);
분 단위로 반환하기 때문에 기존 밀리초 단위로 인자를 받는 new Date() 함수에 넣기 위해서 1000(밀리초)*60(초) 를 곱해 밀리초 단위로 만든다.
이후 현재 시간과의 차이만큼 빼어 시간을 설정하면 된다.