Получение 3 полных года в формате json

Что было бы лучшим способом создать объект json с 3 полными годами.

Например:

{
    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}
        ]...
    }
}

Мне нужно иметь возможность отображать неделю в будущем. Например: какие даты на 8 неделе 2019 года. Мне нужно некоторое представление о том, с чего начать, чтобы начать формулировать объект json… или если он уже существует в какой-то библиотеке.

Но я не уверен, с чего начать пробовать.

Пожалуйста, поделитесь кодом, который вы пробовали.

Hassan Imam 27.05.2019 08:14

Что вы хотите получить на выходе? Если это выход, то каков ввод для этого выхода?

Jack Bashford 27.05.2019 08:16

Почему вы хотите создать такой json? Может быть, вы можете достичь конечного варианта использования, не делая этого.

Ashish 27.05.2019 08:20

Я вижу, что я был недостаточно ясен, извините за это. Мне нужны данные в формате json, и входных данных не будет. Мне нужно иметь возможность отображать неделю в будущем. Например: какие даты на 8-й неделе 2019 года. Мне нужно некоторое представление о том, с чего начать, чтобы начать формулировать объект json… или если он уже существует в какой-то библиотеке. Но я не уверен, с чего начать пробовать.

B-boy 27.05.2019 08:22

@B-boy, нам нужен более конкретный пример. Возможно, вы просите календарь, способ расчета дней недели в любую произвольную дату. Также может быть, что вы спрашиваете только о том, как структурировать данные... Чтобы понять, о чем вы спрашиваете, требуется больше контекста. Для чего этот JSON?

istepaniuk 27.05.2019 08:38

Вам нужна временная метка эпохи для каждого дня? Или просто дата вроде «Понедельник, 3 января 2076 года?»

Bman70 27.05.2019 08:46

Я бы сохранил даты в массиве и сделал бы разделение в коде

Psi 27.05.2019 09:12

@istepaniuk Я пытаюсь создать систему быстрого бронирования с еженедельным отображением календаря.

B-boy 27.05.2019 09:12

У меня недостаточно представителей, чтобы комментировать, но, может быть, moment.js может быть тем, что вам нужно? Например, с помощью moment вы можете узнать, какие даты приходятся на 8-ю неделю 2019 года.

Jimmy-P 27.05.2019 09:17
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
9
322
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

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.info(setYearObject(2017, 2020))

Это не сработало для меня ... но это помогло мне достичь того, что мне нужно, чтобы закончить мой код :) спасибо

B-boy 29.05.2019 16:39
Ответ принят как подходящий

Я не знаю, хороший ли это способ добиться этого... но в любом случае у меня сейчас так.

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.info(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.info(obj[tmpYear + 1])
                if ( obj[tmpYear + 1] !== undefined){
                    if ((obj[tmpYear +1]).length >= 1){
                        obj[tmpYear].push(obj[tmpYear + 1 ][0]);
                    }  
                }
            }
        }
      }
    console.info(obj);
    return obj;
}

Другие вопросы по теме