자바스크립트에서
특정일자의 자정시각을 간단하게 구하고 싶은데
그냥 getTime해서 864000*1000으로 나누어주고
int해주고(Math.floor로 처리) 다시 864000*1000 곱해주고
setTime 했는데
9시간 차이가 남.
난 UTC KST 이런 문제인가 싶었는데
잘 보니 그게 아닌거 같음.
저기서 뭘 잘못했는지 누가 좀 가르쳐주세여. ㅠㅠ
실행해볼 링크
https://jsfiddle.net/Lzu1to73/
아래는 대강 코드.
var theDay = new Date();
var sameAsDay = new Date();
sameAsDay.setTime(theDay.getTime());
var aDay = new Date();
var mod = 86400000;
var cal_str = "";
var mod_day = theDay.getTime(); cal_str += "mod_day getTime:" + mod_day + "\n";
mod_day = Math.floor(mod_day/mod); cal_str += "mod_day Math.floor:" + mod_day + "\n";
mod_day = mod_day*mod; cal_str += "mod_day *mod:" + mod_day + "\n";
aDay.setTime(mod_day);
var aDay2 = new Date(theDay);
aDay2.setHours(0);
aDay2.setMinutes(0);
aDay2.setSeconds(0);
aDay2.setMilliseconds(0);
alert(
theDay + "\n" +
sameAsDay + "\n" +
aDay + "\n" +
aDay2 + "\n" +
mod_day + "\n" +
aDay2.getTime() + "\n" +
cal_str + "\n" +
"");
9시간이면 대놓고 시간대문제 아니냐
UTC기준 자정시간을 구해서 한국 시간대랑 안맞는거 아님?
ㄴ 이거맞음. getTime이 UTC기준값을 주는데 그걸 대상으로 계산했으니 당연히 9시간 차이가 생기는거임. 그냥 바로 getTime(setTime()) 이런식으로 하는건 변형한게 없으니 문제가 안생기는데 시간을 추적하려고 계산하는 순간 UTC임을 고려하지 않으면 저렇게 꼬이는게 맞음. ㅠㅠ
UTC라고 아느냐 게이야
그냥 니말대로 new Date(parseInt(new Date() / (1000 * 60 * 60 * 24)) * (1000 * 60 * 60 * 24)) 하면 끝남
나랑 똑같은 오류에 빠졌네. 복붙해서 넣어봐.
아... 자답한다. 생각해보니 결국 UTC KST 문제 맞네. 애초에 getTime이 돌려주는 값은 UTC 1970년 1월 1일부터임. 그걸 일단위 86400초로 나눴으니 UTC 날짜로 마디가 정해질거고, 그걸 곧바로 KST가 적용되는 setTime에 집어넣으니 9시간 차이가 나는게 수학적으로 맞네. ㅠㅠ
그래 맞다고........................................
ㄴ 응? 위에 넣은게 틀린예제였냐? 말하는게 저러면 된다고 하는건줄 알았네.
아오... 너무 간단한거라 틀릴거라고 예상 못하고 그냥 대충 집어넣었더니 미묘하게 약간 결과가 틀려서 그냥 넘어갈뻔 함. ㅠㅠ 자정에서부터 오전9시까지 나온 결과물이 당연히 꼬이게 되는데, 이 시간대에는 결과물 잘 안나오니까 모를뻔 ㅠㅠ