所以我的json数据如下:
*/1 * * * * python3 /pathtofile/manage.py update_data
像这样,每周间隔7天。给定一个特定的日期,我想根据下降的日期获取其ID。例如。 2018年1月1日至2018年1月7日将是id等。
但是有时可能不存在一个星期,例如2月的所有星期都丢失了。因此,在这种情况下,如果我想输入id为2018-02-25,则应该获取下一个最接近的组,即id为y。
当前,我得到的日期属于一个确切的组,但如果缺少或找不到,则不会,如下所示。理想情况下,我只希望将json数据循环一次,但可以使用有效的解决方案。
[ {"begin": "2018-01-01", "end": "2018-01-07", "id":"a"}, {"begin":"2018-01-08", "end":"2018-01-15", "id":"b"}, {"begin":"2018-03-01", "end":"2018-03-07", "id":"y"}]
对于在json数据中具有组表示形式的日期,它可按预期工作,而对于其他日期则不起作用。有什么想法吗?
答案 0 :(得分:0)
在扫描数组时,请记住哪一组最接近到目前为止所有目标日期。这样,如果您用尽搜索但没有找到匹配项,您将知道哪个是最接近的。
答案 1 :(得分:0)
const parsed_data = [ {"begin": "2018-01-01", "end": "2018-01-07", "id":"a"}, {"begin":"2018-01-08", "end":"2018-01-15", "id":"b"}, {"begin":"2018-03-01", "end":"2018-03-07", "id":"y"}]
let client_date = new Date(2018, 1, 2);
let data = parsed_data.filter(value => {
const end_date_parts = value['end'].split('-');
const end_date = new Date(end_date_parts[0], end_date_parts[1]-1, end_date_parts[2]);
// compare now client_date
if (client_date <= end_date){
return value;
}
});
console.log(data);
答案 2 :(得分:0)
您应该计算传递的日期时间与.getTime()
相加之间的差,以获取时间戳记值。
let parsed_data = [
{"begin": "2018-01-01", "end": "2018-01-07", "id":"a"},
{"begin":"2018-01-08", "end":"2018-01-15", "id":"b"},
{"begin":"2018-03-01", "end":"2018-03-07", "id":"y"}
];
const date = new Date(); //get todays date but care about month and day only
let client_date = new Date(2018, date.getMonth() , date.getDate()).getTime();
// Set default
let i = parsed_data[0];
// Set diff to timediff in 10 years
let diff = 60*60*24*365*10000;
// Loop the data
parsed_data.forEach(function(value, index) {
let start_date_parts = value['begin'].split('-');
let end_date_parts = value['end'].split('-');
let start_date = new Date(start_date_parts[0], start_date_parts[1]-1, start_date_parts[2]).getTime();
let end_date = new Date(end_date_parts[0], end_date_parts[1]-1, end_date_parts[2]).getTime();
if (Math.abs(start_date - client_date) < diff) {
diff = Math.abs(start_date - client_date); // set new diff value
i = parsed_data[index];
}
if (Math.abs(end_date - client_date) < diff) {
diff = Math.abs(start_date - client_date); // set new diff value
i = parsed_data[index];
}
});
console.log(i); // the closest datetime
console.log('The id: ' + i['id']) // the id you need