我需要使用fullcalendar.io创建日历视图。对于某些日期,我在我的数据库中有一个特定的价格并且我检索它,但是对于某些日期(没有特定的价格),我需要将通常的费率放在我需要用JavaScript创建的对象中。现在的问题是因为我不知道如何为此制作JSON。
简而言之:我需要为每个日期定价,但有些日期我会从数据库中获取数据。如何在JavaScript中创建此类JSON对象?
我有这段代码:
var db_data = [
{
"id": 5,
"user_id": 1,
"article_id": 5,
"title": "",
"start": "2016-03-25 15:18:46"
},
{
"id": 4,
"user_id": 1,
"article_id": 5,
"price": 55,
"title": "",
"start": "2016-03-15 15:18:46"
},
{
"id": 3,
"user_id": 1,
"article_id": 5,
"price": 35,
"title": "",
"start": "2016-03-07 15:18:46"
},
{
"id": 2,
"user_id": 1,
"article_id": 5,
"price": 22,
"title": "drugi",
"start": "2016-03-05 15:18:46"
},
{
"id": 1,
"user_id": 1,
"article_id": 5,
"price": 44,
"title": "prvi",
"start": "2016-02-04 15:18:46"
}
];
// declare variables
var period_start = new Date('2016-02-02'),
period_end = new Date('2016-03-03'),
current_date = period_start,
array_of_all_dates = [];
// Create a populated array of dates
// Create a populated array of dates
while (current_date.getTime() <= period_end.getTime()) {
array_of_all_dates.push(current_date);
current_date = new Date(+current_date);
current_date.setDate(current_date.getDate() + 1);
}
// Now loop over the array of populated dates and mutate, so something like
array_of_all_dates = array_of_all_dates.map(function (date) {
var found_in_db = db_data.filter(function (db_data) {
return new Date(db_data.start.replace(" ", "T")).getTime() === date.getTime(); // You need to do this comparison better!
});
if (found_in_db.length > 0) {
return found_in_db[0];
}
var new_object = {
title: '',
start: date,
price: '{{$article->price}}'
};
console.log(new_object);
return new_object;
});
console.log('result'+array_of_all_dates);
drawCalendar(array_of_all_dates);
使用此代码,我从数据库和日期(开始)获取数据,这些数据在我使用JavaScript创建的数据库中并不存在。
我也尝试过这个:
// Now loop over the array of populated dates and mutate, so something like
array_of_all_dates = array_of_all_dates.map(function (date) {
var found_in_db = db_data.filter(function (db_data) {
var db_data_date = new Date(db_data.start.replace(" ", "T"));
return db_data_date.getFullYear() === date.getFullYear() &&
db_data_date.getMonth() === date.getMonth() &&
db_data_date.getDay() === date.getDay();
});
if (found_in_db.length > 0) {
return found_in_db[0];
}
var new_object = {
a_property: 'some_default_value',
start: date
};
console.log(new_object);
return new_object;
});
答案 0 :(得分:2)
我不明白这是怎么回事:
new Date(db_data.start.replace(" ", "T")).getTime() === date.getTime()
可以是true
。 db_data中的日期在"2016-03-15 15:18:46"
中设置了时间,但您在array_of_all_dates
中创建的日期不会Date('2016-02-02')
。
你的第二次约会似乎有效,但我不清楚你希望它是什么结果:
array_of_all_dates.map( ... );
在某些情况下,您将从db_data返回一个如下所示的元素:
{ "id": 5", "user_id": 1, "article_id": 5, "title": "", "start": "2016-03-25 15:18:46" }
如果没有“匹配”,则返回一个如下所示的对象:
{ a_property: 'some_default_value', start: date }
请注意,array_of_all_dates
的所有原始元素都将替换为此操作。
您希望在array_of_all_dates
中结束什么,以便将其传递给drawCalendar
?