以json格式获取3年

时间:2019-05-27 06:10:44

标签: javascript json reactjs

创建一个整整3年的json对象的最佳方法是什么。

例如:

{
    2017:{
        jan:[
            {day:'monday', timestamp:12512421},
            {day:'tuseday', timestamp:151512}
        ]...
    },
    2018:{
        jan:[
                {day:'monday', timestamp:12512421},
                {day:'tuseday', timestamp:151512}
        ]...
    }
    2019:{
        jan:[
            {day:'monday', timestamp:12512421},
            {day:'tuseday', timestamp:151512}
        ]...
    }
}

我需要能够显示一周的时间。例如:日期是在2019年的第8周。我需要一些从哪里开始公式化json对象的想法……或者如果它已经存在于某种库中。

但是我不确定开始尝试什么。

2 个答案:

答案 0 :(得分:0)

function setYearObject(yearStart, yearEnd) {
    const obj = {};
    const start = new Date(yearStart, 0);
    const end = new Date(yearEnd, 0);
    const months = {
    	Jan: [], Feb: [], Mar: [], Apr: [], May: [], Jun: [],
        Jul: [], Aug: [], Sep: [], Oct: [], Nov: [], Dec: []
    };
 
    while (yearStart < yearEnd) { obj[yearStart++] = months  }
    while (start < end) {
        const timeStamp = start.getTime()
        const parts = start.toDateString().split(" ");
        const year = start.getFullYear().toString()
 
        obj[year][parts[1]].push({ day: parts[0], timeStamp: timeStamp });
        start.setDate(start.getDate() + 1);
    }
    return obj;
}

console.log(setYearObject(2017, 2020))

答案 1 :(得分:0)

我不知道这是否是实现此目标的好方法...但是无论如何,这就是我现在拥有的方式。

setYearObject(yearStart, yearEnd) {
    let obj = {};
    let start = new Date(yearStart,0);
    let currentYear = yearStart;
    let currentDay = start;
    let week = [];

    while(currentYear <= yearEnd){    
        obj[currentYear] = [];
        currentYear++;
    }
    currentYear = yearStart;
    console.log(currentDay.getDate());
    while(currentYear !== parseInt(yearEnd) +1){
        week[currentDay.getDay()] = {day: currentDay.getDate(), month:currentDay.getMonth(), dayOfWeek: this.getWeekday(currentDay.getDay())}

        if(currentDay.getDay() >= 6){
            obj[currentYear].push(week);
            week = [];
        }
        currentDay.setDate(currentDay.getDate() + 1);
        currentYear = currentDay.getFullYear();
    }

    for (var property in obj) {
        if (obj.hasOwnProperty(property)) {
            let tmpYear = parseInt(property);
            if(obj[property].length <=52 && obj[property].length >= 1){
                // obj[(tmpYear)].push(obj[(tmpYear + 1)][0])
                console.log(obj[tmpYear + 1])
                if( obj[tmpYear + 1] !== undefined){
                    if((obj[tmpYear +1]).length >= 1){
                        obj[tmpYear].push(obj[tmpYear + 1 ][0]);
                    }  
                }
            }
        }
      }
    console.log(obj);
    return obj;
}