728x90
반응형
이어서 경과된 시간(밀리초)으로부터 월, 일, 시, 분, 초를 계산해 보도록 하겠습니다.
경과 시간에서 경과된 연도를 빼서 일을 계산합니다.
var elapsedDay = Math.trunc((elapsedTime - elapsedTimeOfYear) / day);
console.log(elapsedDay);
--> 71
Math.trunc() 메서드를 소주점 이하는 제거하고 정수만 반환합니다.
월을 계산하기 위해서 계산된 연도 기준으로 2월이 윤달인지 확인하고 윤달을 계산합니다.
그리고 계산된 월을 빼서 월의 일로 계산합니다.
const monthDays = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 윤년 계산
if (dateYear % 400 == 0) {
monthDays[1] = 29;
} else if (dateYear % 100 == 0) {
monthDays[1] = 28;
} else if (dateYear % 4 == 0) {
monthDays[1] = 29;
}
// 계산된 월
var dateMonth = 1;
// 계산된 일
var dateDay = 1;
// 경과된 월의 시간
var elapsedTimeOfMonth = 0;
for (index = 0; index < monthDays.length; index++) {
elapsedTimeOfMonth += monthDays[index];
if (elapsedDay < elapsedTimeOfMonth) {
dateMonth = index + 1;
elapsedTimeOfMonth -= monthDays[index];
dateDay = elapsedDay - elapsedTimeOfMonth;
break;
}
}
console.log(dateMonth);
--> 3
console.log(dateDay);
--> 12
일이 13이 아닌 12 로 나온 이유는 시간이 24시간이어야 하루가 되기 때문입니다. 아직 시간이 24시간이 아니기 때문에 12로 나옵니다.
그런데 날짜의 일은 1부터 시작함으로 출력할 때는 1을 더해야 합니다.
시간이 0시 0분이어도 날짜의 일은 1이기 때문입니다.
// 같은 1일입니다.
2022-01-01 00:00:00.000
2022-01-01 23:59:59.999
시간을 계산하기 위해 경과된 시간에서 계산된 연도의 시간과 경과된 일의 시간을 빼고 시간으로 나눕니다.
var elapsedHours = Math.trunc((elapsedTime - elapsedTimeOfYear - (elapsedDay * day)) / hour);
console.log(elapsedHours);
--> 15
분을 계산하기 위해 경과된 시간에서 계산된 연도의 시간과 경과된 일의 시간, 경과된 시간의 시간을 빼고 분으로 나눕니다.
var elapsedMinutes = Math.trunc((elapsedTime - elapsedTimeOfYear - (elapsedDay * day) - (elapsedHours * hour)) / minute);
console.log(elapsedMinutes);
--> 23
초를 계산하기 위해 경과된 시간에서 계산된 연도의 시간과 경과된 일의 시간, 경과된 시간의 시간, 경과된 분의 시간을 빼고 초로 나눕니다.
var elapsedSeconds = Math.trunc((elapsedTime - elapsedTimeOfYear - (elapsedDay * day) - (elapsedHours * hour) - (elapsedMinutes * minute)) / seconds);
console.log(elapsedSeconds);
--> 37
이처럼 parse() 메서드로 반환된 경과 시간(밀리초)을 계산하여 다시 년, 월, 일, 시, 분, 초를 구해봤습니다.
실제로 이렇게 사용하지 않지만 경과 시간에 대한 계산 방식을 이해하시면 다른 경과 시간 계산에 도움이 되실 겁니다.
728x90
반응형