Что было бы лучшим способом создать объект 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… или если он уже существует в какой-то библиотеке.
Но я не уверен, с чего начать пробовать.
Что вы хотите получить на выходе? Если это выход, то каков ввод для этого выхода?
Почему вы хотите создать такой json? Может быть, вы можете достичь конечного варианта использования, не делая этого.
Я вижу, что я был недостаточно ясен, извините за это. Мне нужны данные в формате json, и входных данных не будет. Мне нужно иметь возможность отображать неделю в будущем. Например: какие даты на 8-й неделе 2019 года. Мне нужно некоторое представление о том, с чего начать, чтобы начать формулировать объект json… или если он уже существует в какой-то библиотеке. Но я не уверен, с чего начать пробовать.
@B-boy, нам нужен более конкретный пример. Возможно, вы просите календарь, способ расчета дней недели в любую произвольную дату. Также может быть, что вы спрашиваете только о том, как структурировать данные... Чтобы понять, о чем вы спрашиваете, требуется больше контекста. Для чего этот JSON?
Вам нужна временная метка эпохи для каждого дня? Или просто дата вроде «Понедельник, 3 января 2076 года?»
Я бы сохранил даты в массиве и сделал бы разделение в коде
@istepaniuk Я пытаюсь создать систему быстрого бронирования с еженедельным отображением календаря.
У меня недостаточно представителей, чтобы комментировать, но, может быть, moment.js может быть тем, что вам нужно? Например, с помощью moment вы можете узнать, какие даты приходятся на 8-ю неделю 2019 года.



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


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))Это не сработало для меня ... но это помогло мне достичь того, что мне нужно, чтобы закончить мой код :) спасибо
Я не знаю, хороший ли это способ добиться этого... но в любом случае у меня сейчас так.
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;
}
Пожалуйста, поделитесь кодом, который вы пробовали.