LHJ

I'm a FE developer.

15.10 날짜 연산

23 May 2020 » js_lj

15.10 날짜 연산

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

const d1 = new Date(1996, 2, 1);
const d2 = new Date(2009, 4, 27);

const msDiff = d2 - d1;                     // 417740400000 ms
const daysDiff = msDiff/1000/60/60/24;      // 4834.96 days

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

const dates = [];

// 랜덤한 날짜를 몇 개 만듭니다.
const min = new Date(2017, 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 배열은 랜덤으로 만들었으므로 (아마) 뒤죽박죽일 겁니다.
// 다음과 같이 역순으로 정렬할 수 있습니다.
dates.sort((a, b) => b - a);

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

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

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는 메서드를 체인으로 연결할 수도 있습니다.

let m = moment()
    .add(10, 'hours')
    .subtract(3, 'days')
    .endOf('month');

// m 은 이제 3일 전으로부터 10시간 뒤인 달의 마지막 순간입니다.