105 moment.js

source: categories/study/vue-experiance/vue-experiance_9-99_06.md

105 moment.js

moment 메소드

moment() : 모멘트 객체 반환, 인자 빈값이면 현재 날짜로 모멘트 객체 생성

moment(날짜스트링) : 인자로 전달한 날짜로 모멘트 객체 생성

this.$moment() : vue에서 모멘트 객체 반환, 인자 빈값이면 현재 날짜로 모멘트 객체 생성

this.$moment(날짜스트링) : 인자로 전달한 날짜로 모멘트 객체 생성

moment().format(‘YYYY-MM-DD') : 날짜 형태

moment().subtract(1, ‘d') : 하루전

moment(날짜1).isAfter(날짜2) : 날짜1이 날짜2보다 뒤의 날짜인지, 2번째 인자로 날짜를 비교할건지 월을 비교할건지 연도를 비교할건지 선택 가능

moment(날짜1).isBefore(날짜2) : 날짜1이 날짜2보다 이전 날짜인지, 2번째 인자로 날짜를 비교할건지 월을 비교할건지 연도를 비교할건지 선택 가능

moment().clone() : 모멘트 객체 복사

moment().toDate() : 모멘트 객체를 자바스크립트 Date 객체로 변환

moment().isValid() : 해당 모멘트 객체(날짜)가 유효한지 아닌지

moment().add(1, ‘d') : 하루뒤

아래는 moment 스태틱 메소드인듯

Vue.moment.isDate(maxDate) : maxDate가 자바스크립트 Date 객체인지 아닌지 // isDate는 moment 스태틱 메소드인듯

moment.duration(endDate.diff(today)) : today와 endDate, 두 날짜 사이의 차이

moment.duration(endDate.diff(today)).asHours() : today와 endDate, 두 날짜 사이의 시간

moment.duration(endDate.diff(today)).asHours().toString() : today와 endDate, 두 날짜 사이의 시간을 문자열로 표시

moment.duration(endDate.diff(today)).asMinutes() : today와 endDate, 두 날짜 사이의 시간을 분으로 표시

moment.duration(endDate.diff(today)).asDays() : today와 endDate, 두 날짜 사이의 시간을 일로 표시



// subtract: 시간을 빼서 원래 순간을 변경한다.
// moment().add()와 정확히 동일하지만 추가하지않고 뺀다.
// this.$moment() 현재 날짜 정보가 담겨있는 모멘트 객체를 반환한다.
const end = this.$moment().subtract(1, 'd'); // 현재 날짜에서 하루를 빼준다.
// const start = end.clone().subtract(1, 'M'); // 하루뺀 날짜에서 1달을 빼준다.
// const start = end.clone().subtract(0, 'd'); // 하루뺀 날짜에서 0일을 빼준다. // 결국 그날
const start = end; // 생각해보니 이러면되잖아? 당일이니깐
this.maxDate = end.format('YYYY-MM-DD'); // 형태를 YYYY-MM-DD로 변경해준다.

// ------------------

const maxDate = this.$moment(this.maxDate).toDate(); // moment 객체를 Date 객체로 변환 toDate
const date = moment.getDefault(
    range,
    type,
    this.$moment(maxDate).isValid() ? maxDate : undefined, // maxDate가 유효한 값이면 maxDate를 세번째 인자로, 아니면 undefined 전달
);

// ------------------

function _getDefault(range, type, maxDate) {
    // maxDate가 자바스크립트 Date 객체인지 확인 isDate
    const today = Vue.moment.isDate(maxDate)
        ? Vue.moment(maxDate) // maxDate가 자바스크립트 Date 객체가 맞으면 moment객체 생성할 때 maxDate 날짜 집어넣어서 생성
        : Vue.moment(); // 아니면 그냥 생성
    let start;
    if (!type) {
        start = Vue.moment().add(range, 'days');
    } else if (type === 'YEAR') {
        start = Vue.moment().add(range, 'year');
    } else if (type === 'MONTH') {
        start = Vue.moment().add(range, 'months');
    } else if (type === 'WEEKS') {
        start = Vue.moment().add(range, 'weeks');
    }
    return {
        start: start.format('YYYY-MM-DD'),
        end: today.format('YYYY-MM-DD'),
    };
}

// ------------------

function setRangeDate(range, type) {
    const maxDate = this.$moment(this.maxDate).toDate(); // moment 객체를 Date 객체로 변환 toDate
    const date = moment.getDefault(
        range,
        type,
        this.$moment(maxDate).isValid() ? maxDate : undefined, // maxDate가 유효한 값이면 maxDate를 세번째 인자로, 아니면 undefined 전달
    );
    this.date.start = date.start;
    this.date.end = date.end;
}

// ------------------

function _convertDeadlineDt(date) {
    const today = Vue.moment();
    const endDate = Vue.moment(date);

    if (
        parseInt(Vue.moment.duration(endDate.diff(today)).asDays().toString()) > 0
    ) {
        return `마감 ${endDate.format('YYYY-MM-DD HH:mm')}`;
    } else if (
        parseInt(Vue.moment.duration(endDate.diff(today)).asHours().toString()) >
        0
    ) {
        return `마감 ${parseInt(
            Vue.moment.duration(endDate.diff(today)).asHours().toString(),
        )}시간 전`;
    } else if (
        parseInt(
            Vue.moment.duration(endDate.diff(today)).asMinutes().toString(),
        ) > 0
    ) {
        return `마감 ${parseInt(
            Vue.moment.duration(endDate.diff(today)).asMinutes().toString(),
        )}분 전`;
    } else {
        return '마감되었습니다.';
    }
}