Javascript 날짜에서 날짜 빼기 - javascript naljja-eseo naljja ppaegi

연도 더하기, 빼기

1년 후의 날짜, 1년 전의 날짜를 계산하기 위해서 getFullYear()와 setFullYear() 함수를 사용하였습니다.

date객체에서 getFullYear() 함수를 이용해서 연도를 추출한 후에,

해당 연도에 1을 더하거나 빼서 1년 후와 1년 전의 연도를 구하고,

그 값을 다시 setFullYear() 함수를 사용해서 원래의 Date객체의 연도를 변경해 주었습니다.

월 더하기, 빼기

연도 더하기 빼기와 마찬가지로,

1달 후, 1달 전의 날짜를 계산하기 위해 getMonth(), setMonth() 함수를 사용하였습니다.

그런데, 말일인 경우에 예상치 못한 결과가 나왔습니다.

1월 31일의 한 달 후 날짜가 3월 3일이라고 나왔습니다. 

아마 대부분 이런 경우 2월의 말일자인 2월 28일(또는 2월 29일, 윤달인 경우)이 나오는 것을 기대할 것입니다.

이런 결과가 나오는 경우는 2019년 1월 31일에 '월'의 숫자만 2월로 갈아 끼웠기 때문입니다.

그러면 2019년 2월 31일이 되는데, 사실 2월 31일은 없습니다. 2019년 2월의 마지막 날은 28일입니다.

그래서, 브라우저는 31-28=3,을 적용하여 3월 3일이라고 표시해 주는 것입니다.

우리가 원하는 결과대로 1월 31일의 한 달 후 날짜는 2월 28일이라는 결과를 얻기 위해서는

말일자를 보정하는 로직을 추가로 넣어주어야 합니다.

이 로직에 관해서는 다른 포스팅에서 다루도록 하겠습니다.

위와 같은 현상의 윤년인 해의 2월 29일에서 1년을 더하거나, 뺄 때도 발생할 것입니다.

즉, 2020년 2월 29일의 1년 후는 2021년 3월 1일이 될 것입니다.

이 부분에 대해서도 별도의 로직을 추가해 주어야 합니다.

이 부분도 다른 별도의 포스팅에서 다루도록 하겠습니다.

일자 더하기, 빼기

연도 계산, 월 계산과 마찬가지로 setDate(), getDate() 함수를 이용하여 

어제와 내일 날짜를 계산하였습니다.

getTime ()

동일한 시간 값으로 날짜 객체를 생성합니다.

var today = new Date();
var copy = today.getTime();
console.log(copy);
//1602754747026

날짜 빼기, 날짜 계산

const today = new Date().getTime();
const endDt = new Date(endDtTimestamp);
const remainingTime = Math.ceil((endDtTimestamp - today) / (24 * 60 * 60 * 1000));
// Number of milliseconds per day
// Math.ceil() : 소수점 올림, 정수 반환
console.log(remainingTime, endDt);
const today = new Date('2019-05-21').getTime();
const endDt = new Date('2019-05-21').getTime();
const remainingTime = Math.ceil((endDt - today) / (24 * 60 * 60 * 1000));
console.log(remainingTime);

위 코드를 실행하면 콘솔창에 0으로 찍힌다. (오늘 만료시 0일 남음으로 뜸.)

medium.com/@pks2974/javascript-%EC%99%80-date-%EB%82%A0%EC%A7%9C-cf638c05f8f3

Javascript 와 Date 날짜

자바스크립트를 처음부터 다시 공부해보려고 한다.

medium.com

developer.mozilla.org/ko/docs/Web/JavaScript/Guide/Numbers_and_dates

숫자와 날짜

이 장에서는 JavaScript에서 숫자와 날짜를 사용하기 위한 개념과 객체, 함수에 대해 소개합니다.

developer.mozilla.org

Javascript 날짜에서 날짜 빼기 - javascript naljja-eseo naljja ppaegi

wdevp.tistory.com/59

javascript 소수점 버림, 올림, 반올림

# 자바스크립트 숫자 타입의 값 버림, 올림 등 다양한 방법 다른 언어들 처럼 숫자를 쉽게 변환할 수 있는 편리한 함수가 자바스크립트에서 존재하며 이때는 Math 객체를 사용합니다. 아래는 Math

wdevp.tistory.com

Javascript 날짜에서 날짜 빼기 - javascript naljja-eseo naljja ppaegi

이전 블로그에서 옮겨온 포스트

오늘 날짜에서 3일 전/후 등의 날짜 계산을 하고 싶다. 하지만 Javascript는 Java의 java.util.Calendar.add(int, int) 같은 날짜 더하고 빼는 기능이 없다. T_T (Java8 이상이라면 java.time.LocalDateTime을 사용하면 Calendar 보다 편하다.)

Java였다면..

Calendar rightNow = Calendar.getInstance(); // 현재 시간
rightNow.add(Calendar.DATE, 3); // 3일 뒤
rightNow.add(Calendar.MONTH, -3); // 거기에 3달 전

이 기능의 가장 편한 점은 년, 월을 자동으로 계산해준다는 점이다. 만일 오늘이 3월 1일인데 3일 전 날짜를 알아야 한다면, 2월의 날짜를 계산해주는건 물론이고 윤달까지 판단해주기 때문에 대똥 좋다!! +_+d

자.. 그럼 Javascript라면 어떻게?!?! Date.prototype.setDate()를 사용하면 된다.

var theBigDay = new Date(1962, 6, 7); // 1962-07-07
theBigDay.setDate(24); // 1962-07-24
theBigDay.setDate(32); // 1962-08-01 -> 7월은 31일까지만 있으므로, 8월로 자동 계산..

var threeDaysAgo = new Date(2014, 2, 1); // 2014-03-01 - 월은 0에서부터 시작된다.
threeDaysAgo.setDate(threeDaysAgo.getDate() - 3); // 2014-02-26 => 3일전으로~

원래 setDate()는 해당 날짜를 설정하는 함수이지만, 해당 달의 날짜를 벗어나는 경우는 이전/이후 달로 자동으로 계산해준다. 위의 샘플에서 theBigDay에 setDate(24)를 호출한 결과는, 7월에는 24일이 포함되어 있기 때문에 7월 24일로 설정이 된다. 하지만 setDate(32)의 결과는, 7월에는 32일이 없기 때문에 7월의 마지막 날짜인 31일을 뺀 1일이 날짜로 설정되고 다음 달로 넘어가서 8월 1일이 된다.

이런 성질을 잘 이용해서 Date 객체의 날짜를 기준으로 x일 전/후 날짜를 구할 수 있다. 3월 1일로 설정한 threeDaysAgo의 getDate()로 현재 날짜를 가져와서 +- 날짜를 설정해 주자. :D

그리고 뽀나스~ 위의 방법으로 해당 월의 마지막날짜 구하기

var d1 = new Date(2014, 2, 1); // 2014-03-01
d1.setDate(0); // 2014-02-28 => 2월 마지막날
var d2 = new Date(2014, 2, 1); // 2014-03-01
d2.setDate(-1); // 2014-02-27 => 2월 마지막날에서 하루 전

setDate(0)을 호출하면 해당 월에는 0일이 없으므로, 이전달 마지막 날로 넘어가게 된다.

참고

  • Date.prototype.setDate()
  • How to add number of days to today’s date?
  • java.time.LocalDateTime

  • #javascript
  • #date
  • #add
  • #sub