자바스크립트 날짜 차이부터 요일 계산까지 완벽 가이드
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
여기까지 읽어주셔서 진심으로 감사드립니다.
이 글이 마음에 드셨다면, 우측 아래 하트(공감)를 눌러 응원의 표시를 부탁드려요.
여러분의 소중한 관심과 사랑이 큰 힘이 됩니다. 감사합니다!
'개발(Dev) > JavaScript, HTML5, CSS' 카테고리의 다른 글
[JavaScript]자바스크립트 회원가입 유효성 검사 (1) | 2018.10.22 |
---|