자바스크립트 날짜 차이부터 요일 계산까지 완벽 가이드
yyyyMMdd 형식과 yyyy-MM-dd 형식 간의 변환은 본문의 가장 하단에서 확인하시면 됩니다.
자바스크립트 날짜 계산 추천글
1. 기본
1.1 현재 날짜와 시간 구하기
현재 날짜와 시간을 구하는 것은 자바스크립트에서 매우 간단합니다. new Date() 객체를 사용하면 됩니다.
let now = new Date();
console.log(now); // 현재 날짜와 시간이 출력됩니다.
1.2 특정 날짜 구하기
특정 날짜를 설정하려면 Date 객체에 문자열을 전달하면 됩니다.
let specificDate = new Date("2024-12-31");
console.log(specificDate);
1.3 날짜 더하기
특정 날짜에 일수를 더하려면 setDate 메서드를 사용합니다.
let date = new Date();
date.setDate(date.getDate() + 7); // 현재 날짜에 7일을 더합니다.
console.log(date); // 7일 후의 날짜가 출력됩니다.
1.4 날짜 차이 계산하기
두 날짜 간의 차이를 구하려면 getTime 메서드를 사용하여 밀리초 단위의 차이를 계산한 후 일 단위로 변환합니다.
let startDate = new Date('2024-01-01');
let endDate = new Date('2024-12-31');
let diffTime = endDate.getTime() - startDate.getTime();
let diffDays = diffTime / (1000 * 60 * 60 * 24);
console.log(diffDays); // 두 날짜 간의 차이가 일 단위로 출력됩니다.
1.5 날짜 형식 변경하기
날짜를 원하는 형식으로 출력하려면 toLocaleDateString 메서드를 사용합니다.
let date = new Date();
let formattedDate = date.toLocaleDateString('en-US'); // 미국 형식으로 날짜를 출력합니다.
console.log(formattedDate);
2. 심화
2.1 특정 날짜 일수 차이
두 날짜 간의 차이를 구하려면 getTime 메서드를 사용하여 밀리초 단위의 차이를 계산한 후 이를 일 단위로 변환할 수 있습니다.
function getDaysDifference(date1, date2) {
// date1과 date2 문자열을 Date 객체로 변환합니다.
let startDate = new Date(date1);
let endDate = new Date(date2);
// 두 날짜 간의 시간 차이를 밀리초 단위로 계산합니다.
let diffTime = endDate.getTime() - startDate.getTime();
// 밀리초를 일 단위로 변환합니다.
let diffDays = diffTime / (1000 * 60 * 60 * 24);
// 일수 차이를 반환합니다.
return diffDays;
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
let date2 = '2024-07-07';
// 두 날짜 간의 일수 차이를 출력합니다.
console.log(getDaysDifference(date1, date2));
- 1초는 1000 밀리초입니다.
- 1분은 60초입니다.
- 1시간은 60분입니다.
- 1일은 24시간입니다.
- 따라서, 1000 * 60 * 60 * 24는 1일에 해당하는 밀리초입니다.
- diffTime을 이 값으로 나누면 일 단위 차이가 계산됩니다.
2.2 특정 날짜 개월 차이
두 날짜 간의 개월 수 차이를 구하려면 연도 차이와 월 차이를 계산한 후 이를 조합하여 개월 수를 구할 수 있습니다.
function getMonthsDifference(date1, date2) {
// date1과 date2 문자열을 Date 객체로 변환합니다.
let startDate = new Date(date1);
let endDate = new Date(date2);
// 두 날짜 간의 연도 차이를 계산합니다.
let years = endDate.getFullYear() - startDate.getFullYear();
// 두 날짜 간의 월 차이를 계산합니다.
let months = endDate.getMonth() - startDate.getMonth();
// 총 개월 수를 반환합니다.
return years * 12 + months;
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
let date2 = '2024-07-07';
// 두 날짜 간의 개월 차이를 출력합니다.
console.log(getMonthsDifference(date1, date2));
- getFullYear 메서드는 Date 객체의 연도 값을 반환합니다.
- getMonth 메서드는 Date 객체의 월 값을 0부터 11까지의 숫자로 반환합니다.
2.3 특정 날짜 년수 차이
두 날짜 간의 연수 차이를 구하려면 getFullYear 메서드를 사용하여 연도 단위의 차이를 계산할 수 있습니다.
function getYearsDifference(date1, date2) {
// date1과 date2 문자열을 Date 객체로 변환합니다.
let startDate = new Date(date1);
let endDate = new Date(date2);
// 두 날짜 간의 연도 차이를 반환합니다.
return endDate.getFullYear() - startDate.getFullYear();
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
let date2 = '2024-07-07';
// 두 날짜 간의 연수 차이를 출력합니다.
console.log(getYearsDifference(date1, date2));
2.4 특정 날짜의 요일 구하기
특정 날짜의 요일을 구하려면 getDay 메서드를 사용합니다.
function getDayOfWeek(dateStr) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// 요일 배열을 정의합니다.
let days = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'];
// 해당 날짜의 요일을 반환합니다.
return days[date.getDay()];
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 특정 날짜의 요일을 출력합니다.
console.log(getDayOfWeek(date1));
2.5 특정 날짜로부터 N일 후의 날짜 구하기
자바스크립트를 사용하여 특정 날짜로부터 N일 후의 날짜를 계산하는 방법을 살펴보겠습니다.
function addDaysToDate(dateStr, days) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// Date 객체의 현재 날짜에 days만큼 더합니다.
date.setDate(date.getDate() + days);
// 새로운 날짜를 지역 형식의 문자열로 반환합니다.
return date.toLocaleDateString();
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 특정 날짜로부터 10일 후의 날짜를 출력합니다.
console.log(addDaysToDate(date1, 10));
- getDate 메서드는 Date 객체의 현재 일(day)을 반환합니다.
- setDate 메서드는 Date 객체의 일(day)을 설정합니다.
- date.getDate() + days는 현재 날짜에 days만큼 더한 값을 설정합니다.
- toLocaleDateString 메서드는 Date 객체를 지역 형식의 날짜 문자열로 변환합니다.
2.6 특정 날짜로부터 N개월 후의 날짜 구하기
자바스크립트를 사용하여 특정 날짜로부터 N개월 후의 날짜를 계산하는 방법을 살펴보겠습니다.
function addMonthsToDate(dateStr, months) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// Date 객체의 현재 월에 months만큼 더합니다.
date.setMonth(date.getMonth() + months);
// 새로운 날짜를 지역 형식의 문자열로 반환합니다.
return date.toLocaleDateString();
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 특정 날짜로부터 3개월 후의 날짜를 출력합니다.
console.log(addMonthsToDate(date1, 3));
- getMonth 메서드는 Date 객체의 현재 월(month)을 0부터 11까지의 숫자로 반환합니다.
- setMonth 메서드는 Date 객체의 월(month)을 설정합니다.
- date.getMonth() + months는 현재 월에 months만큼 더한 값을 설정합니다.
- 예를 들어, date가 2024년 6월(즉, 5)이고 months가 3이라면, setMonth 메서드는 2024년 9월(즉, 8)로 월을 설정합니다.
2.7 특정 날짜로부터 N년 후의 날짜 구하기
자바스크립트를 사용하여 특정 날짜로부터 N 후의 날짜를 계산하는 방법을 살펴보겠습니다.
function addYearsToDate(dateStr, years) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// Date 객체의 현재 연도에 years만큼 더합니다.
date.setFullYear(date.getFullYear() + years);
// 새로운 날짜를 지역 형식의 문자열로 반환합니다.
return date.toLocaleDateString();
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 특정 날짜로부터 2년 후의 날짜를 출력합니다.
console.log(addYearsToDate(date1, 2));
- getFullYear 메서드는 Date 객체의 현재 연도(year)를 반환합니다.
- setFullYear 메서드는 Date 객체의 연도(year)를 설정합니다.
- date.getFullYear() + years는 현재 연도에 years만큼 더한 값을 설정합니다.
- 예를 들어, date가 2024년이고 years가 2라면, setFullYear 메서드는 2026년으로 연도를 설정합니다.
2.8 날짜 포맷 변경
날짜를 원하는 형식으로 출력하려면 toLocaleDateString 메서드를 사용합니다.
function formatDate(dateStr, locale) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// Date 객체를 지정한 로케일 형식의 문자열로 변환합니다.
return date.toLocaleDateString(locale);
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 한국 형식으로 날짜를 출력합니다.
console.log(formatDate(date1, 'ko-KR'));
// 미국 형식으로 날짜를 출력합니다.
console.log(formatDate(date1, 'en-US'));
- 한국 (ko-KR)
- 형식: YYYY.MM.DD
- 예시: 2024.06.27
- 미국 (en-US)
- 형식: MM/DD/YYYY
- 예시: 06/27/2024
2.9 특정 월의 첫 번째 날짜와 마지막 날짜 구하기
특정 월의 첫 번째 날짜와 마지막 날짜 구하는 방법입니다.
function getFirstAndLastDayOfMonth(year, month) {
// 월의 첫 번째 날짜 구하기
let firstDay = new Date(year, month - 1, 1); // month는 1부터 12까지
// 다음 달의 첫 번째 날짜 생성
let nextMonth = new Date(year, month, 1);
// 다음 달의 첫 번째 날짜에서 하루를 빼서 해당 월의 마지막 날짜 구하기
nextMonth.setDate(nextMonth.getDate() - 1);
let lastDay = nextMonth;
// yyyy-MM-dd 형식으로 반환
let firstDayStr = firstDay.toISOString().slice(0, 10);
let lastDayStr = lastDay.toISOString().slice(0, 10);
return { firstDay: firstDayStr, lastDay: lastDayStr };
}
// 테스트를 위한 연도와 월 입력
let year = 2024;
let month = 6; // 6월
console.log(getFirstAndLastDayOfMonth(year, month)); // { firstDay: "2024-06-01", lastDay: "2024-06-30" }
{ firstDay: '2024-06-01', lastDay: '2024-06-30' }
2.10 특정 월의 첫 번째 날짜와 마지막 날짜의 일자만 구하기
특정 월의 첫 번째 날짜와 마지막 날짜의 일자만 구하는 방법입니다.
function getFirstAndLastDayOfMonthDates(year, month) {
// 월의 첫 번째 날짜 구하기
let firstDay = new Date(year, month - 1, 1); // month는 1부터 12까지
// 다음 달의 첫 번째 날짜 생성
let nextMonth = new Date(year, month, 1);
// 다음 달의 첫 번째 날짜에서 하루를 빼서 해당 월의 마지막 날짜 구하기
nextMonth.setDate(nextMonth.getDate() - 1);
let lastDay = nextMonth;
// 첫 번째 날짜와 마지막 날짜의 일자만 반환
let firstDayDate = firstDay.getDate();
let lastDayDate = lastDay.getDate();
return { firstDay: firstDayDate, lastDay: lastDayDate };
}
// 테스트를 위한 연도와 월 입력
let year = 2024;
let month = 6; // 6월
console.log(getFirstAndLastDayOfMonthDates(year, month)); // { firstDay: 1, lastDay: 30 }
{ firstDay: 1, lastDay: 30 }
2.11 특정일자가 포함된 그 주의 날짜와 요일 구하기
특정 일자가 포함된 그 주의 날짜와 요일을 각각 구하는 방법입니다.
function getWeekDatesAndDays(dateStr) {
// 주어진 날짜를 Date 객체로 변환합니다.
let date = new Date(dateStr);
// 주어진 날짜의 요일을 구합니다. (0 = 일요일, 1 = 월요일, ..., 6 = 토요일)
let dayOfWeek = date.getDay();
// 해당 주의 시작일 (일요일)을 계산합니다.
let startDate = new Date(date);
startDate.setDate(date.getDate() - dayOfWeek);
// 해당 주의 종료일 (토요일)을 계산합니다.
let endDate = new Date(date);
endDate.setDate(date.getDate() + (6 - dayOfWeek));
// 요일 배열
let days = ['일요일', '월요일', '화요일', '수요일', '목요일', '금요일', '토요일'];
// 시작일과 종료일 사이의 모든 날짜와 요일을 배열로 저장합니다.
let weekDates = [];
for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) {
weekDates.push({
date: d.toISOString().slice(0, 10), // yyyy-MM-dd 형식으로 변환
day: days[d.getDay()]
});
}
return weekDates;
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
console.log(getWeekDatesAndDays(date1)); // 특정 일자가 포함된 그 주의 날짜와 요일을 출력합니다.
[
{ date: '2024-06-23', day: '일요일' },
{ date: '2024-06-24', day: '월요일' },
{ date: '2024-06-25', day: '화요일' },
{ date: '2024-06-26', day: '수요일' },
{ date: '2024-06-27', day: '목요일' },
{ date: '2024-06-28', day: '금요일' },
{ date: '2024-06-29', day: '토요일' }
]
- Date 객체 생성
- let date = new Date(dateStr);
- dateStr는 문자열 형식의 날짜입니다.
- new Date(dateStr)는 dateStr 문자열을 Date 객체로 변환합니다.
- 요일 구하기
- let dayOfWeek = date.getDay();
- getDay 메서드는 주어진 날짜의 요일을 반환합니다. (0 = 일요일, 1 = 월요일,..., 6 = 토요일)
- 해당 주의 시작일 (일요일) 계산
- let startDate = new Date(date);
startDate.setDate(date.getDate() - dayOfWeek);
- let startDate = new Date(date);
- 해당 주의 종료일 (토요일) 계산
- let endDate = new Date(date);
endDate.setDate(date.getDate() + (6 - dayOfWeek));
- let endDate = new Date(date);
- 해당 주의 모든 날짜와 요일을 배열로 저장
- let weekDates = [];
for (let d = new Date(startDate); d <= endDate; d.setDate(d.getDate() + 1)) {
weekDates.push({
date: d.toISOString().slice(0, 10), // yyyy-MM-dd 형식으로 변환
day: days[d.getDay()]
});
}
- let weekDates = [];
- 결과 반환
- return weekDates;.
2.12 년, 월, 일을 기준으로 몇 번째 일인지 계산하기
function convertDateToDays(year, month, day) {
// 주어진 날짜까지의 일수를 계산합니다.
const daysInYear = 365;
const daysInMonth = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
// 입력받은 월의 유효성을 체크합니다.
if (month < 1 || month > 12) {
throw new Error("월이 유효하지 않습니다.");
}
// 입력받은 일의 유효성을 체크합니다.
if (day < 1 || day > daysInMonth[month - 1]) {
throw new Error("일이 유효하지 않습니다.");
}
// 년도별로 일수를 계산합니다.
let totalDays = (year - 1) * daysInYear; // 전년도까지의 총 일수
// 해당 년도의 월별 일수를 더합니다.
for (let i = 0; i < month - 1; i++) {
totalDays += daysInMonth[i];
}
// 해당 월의 일수를 더합니다.
totalDays += day;
return totalDays;
}
// 테스트를 위한 날짜 입력
let year = 2;
let month = 6;
let day = 27;
console.log(convertDateToDays(year, month, day)); // 해당 날짜를 기준으로 몇 '일'인지 출력합니다.
547
3. yyyyMMdd와 yyyy-MM-dd 형식 간의 변환
3.1. yyyy-MM-dd 형식에서 yyyyMMdd 형식으로 변환하기
function formatDateYYYYMMDD(dateStr) {
// dateStr 문자열을 Date 객체로 변환합니다.
let date = new Date(dateStr);
// 연도를 가져옵니다.
let year = date.getFullYear();
// 월을 가져오고, 두 자리 숫자로 맞춥니다.
let month = ('0' + (date.getMonth() + 1)).slice(-2); // 월은 0부터 시작하므로 1을 더합니다.
// 일을 가져오고, 두 자리 숫자로 맞춥니다.
let day = ('0' + date.getDate()).slice(-2);
// 'yyyyMMdd' 형식으로 문자열을 반환합니다.
return `${year}${month}${day}`;
}
// 테스트를 위한 날짜 입력
let date1 = '2024-06-27';
// 'yyyyMMdd' 형식으로 날짜를 출력합니다.
console.log(formatDateYYYYMMDD(date1)); // 20240627
3.2 yyyyMMdd 형식에서 yyyy-MM-dd 형식으로 변환하기
function formatDateToISO(dateStr) {
let year = dateStr.slice(0, 4); // 문자열의 앞 4자리를 연도로 가져옵니다.
let month = dateStr.slice(4, 6); // 문자열의 5번째와 6번째 문자를 월로 가져옵니다.
let day = dateStr.slice(6, 8); // 문자열의 7번째와 8번째 문자를 일로 가져옵니다.
// 연도, 월, 일을 yyyy-MM-dd 형식의 문자열로 조합하여 반환합니다.
return `${year}-${month}-${day}`;
}
// 테스트를 위한 날짜 입력
let date1 = '20240101';
// 변환된 날짜를 출력합니다.
console.log(formatDateToISO(date1)); // 2024-01-01
여기까지 읽어주셔서 진심으로 감사드립니다.
이 글이 마음에 드셨다면, 우측 아래 하트(공감)를 눌러 응원의 표시를 부탁드려요.
여러분의 소중한 관심과 사랑이 큰 힘이 됩니다. 감사합니다!