munifico.github.io

munifico's anything page

Follow me on GitHub

날짜 연산

날짜는 숫자이므로 날짜에서 날짜를 빼면 몇 밀리초가 지났는지 알 수 있습니다.

const d1 = new Date(1985, 10, 2);
const d2 = new Date(2019, 8, 10);

const msDiff = d2 - d1;                    // 1068336000000 ms
const daysDiff = msDiff/1000/60/60/24;     // 12365 days

Arrays.prototype.sort를 써서 날짜를 정렬할 수도 있습니다.

const dates = [];

// 랜덤한 날짜를 몇 개 만듭니다.
const min = new Date(2019, 0, 1).valueOf();
const delta = new Date(2020, 0, 1).valueOf() - min;
for(let i=0; i<10; i++) {
    dates.push(new Date(min + delta * Math.random()));
}

/*
갓 만들어진 dates : [
  2019-07-02T14:04:00.502Z,
  2019-01-25T04:30:20.037Z,
  2019-11-25T08:51:31.155Z,
  2019-12-05T16:06:54.204Z,
  2019-01-18T10:32:39.646Z,
  2019-05-07T08:58:42.600Z,
  2019-06-18T21:14:32.534Z,
  2019-04-18T17:44:08.563Z,
  2019-01-29T14:26:21.280Z,
  2019-04-25T05:11:43.066Z
]
*/

// dates 배열은 랜덤으로 만들었으므로 (아마) 뒤죽박죽일 겁니다.
// 다음과 같이 역순으로 정렬할 수 있습니다.
dates.sort((a, b) => b - a);

/*
역순으로 정렬한 dates : [
  2019-12-05T16:06:54.204Z,
  2019-11-25T08:51:31.155Z,
  2019-07-02T14:04:00.502Z,
  2019-06-18T21:14:32.534Z,
  2019-05-07T08:58:42.600Z,
  2019-04-25T05:11:43.066Z,
  2019-04-18T17:44:08.563Z,
  2019-01-29T14:26:21.280Z,
  2019-01-25T04:30:20.037Z,
  2019-01-18T10:32:39.646Z
]
*/

// 날짜순으로 정렬할 수도 있습니다.
dates.sort((a, b) => a - b);

/*
날짜순으로 정렬한 dates : [
  2019-01-18T10:32:39.646Z,
  2019-01-25T04:30:20.037Z,
  2019-01-29T14:26:21.280Z,
  2019-04-18T17:44:08.563Z,
  2019-04-25T05:11:43.066Z,
  2019-05-07T08:58:42.600Z,
  2019-06-18T21:14:32.534Z,
  2019-07-02T14:04:00.502Z,
  2019-11-25T08:51:31.155Z,
  2019-12-05T16:06:54.204Z
]
*/

Moment.js 에는 날짜를 빼거나 더하는 데 유용한 메서드도 많이 들어있습니다.

const moment = require('moment');

let m = moment();       // 현재
m.add(3, 'days');       // m은 이제 3일 뒤입니다.
m.subtract(2, 'years'); // m은 이제 2년 전으로부터 3일이 지난 날짜입니다.

m = moment();           // 리셋
m.startOf('year');      // m은 이제 올해의 1월 1일입니다.
m.endOf('month');       // m은 이제 올해의 1월 31일입니다.

Moment.js는 메서드를 체인으로 연결할 수도 있습니다.

const moment = require('moment');

let m = moment()
    .add(10, 'hours')
    .subtract(3, 'days')
    .endOf('month');
// m은 이제 3일전으로부터 10시간 뒤인 달의 마지막 순간입니다.
// 3일전으로 부터 10시간 뒤가 달이 바뀐다면 그 달의 마지막 순간(막일의 23:59:59)일 테고, 달이 바뀌지 않는다면 이번 달의 마지막 순간(23:59:59)일 겁니다.

이전 : 날짜 비교
다음 : 날짜 사용자가 알기 쉬운 상대적 날짜
목차