2017-12-15 5 views
-1

다음 코드는 일정 방식으로 올해과 형식 그것의 현재 월을 취다음 코드를 작성하면 지난 달에 12 개월을 더한 월이 생성됩니까?

let curYear = 2017 
let curMonth = 11 
let result = [] 
let firstDayOfMonth = new Date(curYear, curMonth, 1) 
let lastDayOfMonth = new Date(curYear, curMonth, getLastDayOfMonth(curMonth)) 

result.unshift(firstDayOfMonth) 
for (let d = prevDate(firstDayOfMonth); d.getDay() !== 6; d = this.prevDate(d)) { 
    result.unshift(d) 
} 
for (let d = nextDate(firstDayOfMonth); d <= lastDayOfMonth; d = nextDate(d)) { 
    result.push(d) 
} 
for (let d = nextDate(lastDayOfMonth); d.getDay() !== 0; d = nextDate(d)) { 
    result.push(d) 
} 

console.log(JSON.stringify(result)) 

function nextDate (d) { 
    let result = new Date(d.valueOf()) 
    result.setDate(d.getDate() + 1) 
    return result 
} 

function prevDate (d) { 
    let result = new Date(d.valueOf()) 
    result.setDate(d.getDate() - 1) 
    return result 
} 

function getLastDayOfMonth (m) { 
    let result = [31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31] 
    if (leapYear) { 
    result[1] = 29 
    } 
    return result[m] 
} 

function leapYear() { 
    if (curYear % 100 === 0) { 
    return curYear % 400 === 0 
    } else { 
    return curYear % 4 === 0 
    } 
} 

출력 :

[ "2017-11-25T16 : 00 : 00.000Z", "2017 -11-26T16 : 00 : 00.000Z ","2017-11-27T16 : 00 : 00.000Z ","2017-11-28T16 : 00 : 00.000Z ","2017-11-29T16 : 00 : 00.000Z " "2017-11-30T16 : 00 : 00.000Z", "2017-12-01T16 : 00 : 00.000Z", "2017-12-02T16 : 00 : 00.000Z", "2017-12-03T16 : 00 : 00.000Z ","2017-12-04T16 : 00 : 00.000Z ","2017-12-05T16 : 00 : 00.000Z ","2017-12-06T16 : 00 : 00.000Z ","2017-12-07T16 : 00 : 00.000Z ","2017-12-08T16 : 00 : 00.000Z ","2017-12-09T16 : 00 : 00.000Z ","2017-12-10T16 : 00 : 00.000Z ","2017-12-11T16 : 00 : 00.0 00Z ","2017-12-12T16 : 00 : 00.000Z ","2017-12-13T16 : 00 : 00.000Z ","2017-12-14T16 : 00 : 00.000Z ","2017-12-15T16 : 00 : 00.000Z ","2017-12-16T16 : 00 : 00.000Z ","2017-12-17T16 : 00 : 00.000Z ","2017-12-18T16 : 00 : 00.000Z ","2017-12-19T16 : 00 : 00.000Z ","2017-12-20T16 : 00 : 00.000Z ","2017-12-21T16 : 00 : 00.000Z ","2017-12-22T16 : 00 : 00.000Z ","2017-12 -23T16 : 00 : 00.000Z ","2017-12-24T16 : 00 : 00.000Z ","2017-12-25T16 : 00 : 00.000Z ","2017-12-26T16 : 00 : 00.000Z ","2017 -12-27T16 : 00 : 00.000Z ","2017-12-28T16 : 00 : 00.000Z ","2017-12-29T16 : 00 : 00.000Z ","2017-12-30T16 : 00 : 00.000Z " "2017-12-31T16 : 00 : 00.000Z", "2018-01-01T16 : 00 : 00.000Z", "2018-01-02T16 : 00 : 00.000Z", "2018-01-03T16 : 00 : 00.000Z ","2018-01-04T16 : 00 : 00.000Z ","2018-01-05T16 : 00 : 00.000Z "]는 이전 12개월 플러스 현재 월을 반환하므로이 기능을 수정하는 방법

?

예를 들어 (오른쪽에서 왼쪽으로 읽기) :

(and so on) ... 2017-10-05, ... 2017-11-05, ... 2017-12-05, ... , 2018-01-05] 

Codepen을 : https://codepen.io/alexcheninfo/pen/zpGMvz

참고 : 나는 또한 Moment.js/Luxon 대안을 환영

+0

은 사용의 생각 더 많은 지원을위한 어떤 종류의 도서관? Like moment.js –

+0

당신은 모든 코드를 작성했는데 가장 쉬운 부분을 어떻게 수행해야할지 모르십니까? – Adelin

+0

출력은 어떻게 생겼을 까? – gurvinder372

답변

1
// use moment.js 
let curDate = moment();  
let newDate = moment().add(12, 'month'); 
let dateValues = []; 

while (newDate > curDate) { 
    dateValues.push(curDate.format('YYYY-MM-DD')); 
    curDate.add(1,'month'); 
} 
+0

나는 달을 포함하는 배열이 아닌 문자열 만 생성한다고 생각한다. – alex

+0

@alex 12 개월 배열이 필요합니까? – zabusa

+0

예 배열이 필요합니다. – alex