일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- vscode
- CMD
- table
- 테이블
- Eclipse
- 문자열
- string
- 자바
- date
- 이탈리아
- json
- html
- Visual Studio Code
- IntelliJ
- Array
- 인텔리제이
- input
- 배열
- js
- windows
- Button
- Java
- Files
- list
- 자바스크립트
- CSS
- javascript
- 이클립스
- ArrayList
- Maven
- Today
- Total
어제 오늘 내일
[Javascript] 날짜 계산 (Date) 마지막 날짜(말일)/윤달/윤년 처리하기 본문
지난번에는 HTML과 Javascript에서 날짜와 시간을 처리하는 방법들을 알아보았습니다.
[HTML] 날짜, 시간 입력 항목 기본값으로 세팅하기
[HTML] 날짜 입력 항목에 현재 시간을 기본값으로 세팅하기
[Javascript] Date 객체로 원하는 날짜, 시간 표현하기
[Javascript] 날짜 계산하기 (년/월/일 더하기, 빼기)
이번 포스팅에서는 날짜를 계산할 때 마지막 날짜, 윤년, 윤달 처리를 어떻게 할 것인지 알아보도록 하겠습니다.
Date() 함수를 이용한 날짜 계산에서 발생하는 말일자 문제
See the Pen Date by anna (@hianna) on CodePen.
월의 마지막 날짜에 1개월을 더하거나 뺐을 때 위와 같은 문제가 발생하였습니다.
[ 참조 : [Javascript] 날짜 계산하기 (년/월/일 더하기, 빼기) ]
아마 대부분 이런 경우,
1월 31일 + 1개월을 계산하면
2월의 말일자인 2월 28일(또는 2월 29일, 윤달인 경우)이 나오는 것을 기대할 것입니다.
그렇지만, 위와 같이 계산하면 Javascript에서는
1월 31+1개월 = 2월 31일이라고 계산하게 되고,
실제로 2월 31일은 존재하지 않으므로,
2월의 마지막 날짜인 2월 28일로부터 3일 후의 날짜(31-28 = 3)를 적용하여,
3월 3일이라고 표현하게 됩니다.
날짜 계산(Date)에서 마지막 날짜/윤달/윤년 처리하기
위 문제를 해결하고, 우리가 원하는 답인 2월 28일을 얻기 위해서는 별도로 로직을 구현해야 합니다.
See the Pen Date by anna (@hianna) on CodePen.
먼저, 기준이 되는 달(1월 31일),
여기서는 1월 31일로부터 "1달 후의 첫번째 날짜(2월 1일)"와 "마지막 날짜(2월 28일)"을 계산하였습니다.
특정 달의 마지막 일자를 계산하는 방법은 지난 포스팅을 참조하세요.
[ 참조 : [Javascript] 월의 마지막 날 계산하기 ]
이 방법을 응용해서 말일자를 체크하는 함수를 작성하고,
이 함수를 사용해서 날짜를 계산하도록 하겠습니다.
See the Pen Date by anna (@hianna) on CodePen.
코드를 살펴보면,
말일자 처리를 위해서 addMonth(date, month)라는 함수를 만들었습니다.
이 함수는 date(기준일자)와 month(더해질 개월수)를 파라미터로 받습니다.
- 기준일자에 month만큼 더한 월의 첫 번째 날짜를 구합니다. (addMonthFirstDate)
- month만큼 더한 월의 마지막 날짜도 구합니다. (addMonthLastDate)
- 리턴 값(result) 변수를 선언하고, 1에서 계산한 값을 할당해줍니다.
- 파라미터로 받은 기준일자의 날짜와 2에서 구한 날짜의 date값(즉, 2자리 일자)을 비교하여 작은 값을 리턴 값의 date값으로 할당해줍니다.
즉, MIN(기준일자의 날짜 중 date 값, 2에서 구한 날짜의 date 값)을 3에서 만든 리턴값의 date값으로 할당해줍니다. - 마지막으로, addMonth() 함수를 호출해서 테스트를 해보면,
원하는 대로 결과가 나오는 것을 확인 할 수 있습니다.
월을 계산할 때 발생하는 말일자 문제(윤달, 윤년 포함)를 해결하는 코드를 작성해 보았습니다.
보통은 이렇게 직접 로직을 구현해서 사용해도 되지만,
이미 구현이 되어 있는 오픈소스들을 활용하는 것도 좋은 방법입니다.
'IT > Javascript' 카테고리의 다른 글
[Javascript] 대소문자 변경 (대문자를 소문자로, 소문자를 대문자로) (0) | 2020.03.20 |
---|---|
[Javascript] 시간 계산하기 (시/분/초/ 더하기, 빼기) (2) | 2019.08.06 |
[Javascript] 월의 마지막 날짜 계산하기 (0) | 2019.08.04 |
[Javascript] 날짜 계산하기 (년/월/일 더하기, 빼기) (0) | 2019.08.03 |
[Javascript] Date 객체로 원하는 날짜, 시간 표현하기 (0) | 2019.08.02 |