我在数据表中有一个包含数据的列,类似于下面的内容:
0500-1300
0500-1430
0600-0915
0600-1000
0600-1100
0600-1115
0600-1130
0600-1200
0600-1215
0600-1300
0600-1315
我希望过滤器与http://yadcf-showcase.appspot.com/dom_bootstrap_time.html不太相似,有人可以选择FROM时间和TO时间,然后过滤数据。
让我们说有人选择:
FROM: 0600
TO: 1100
然后只会显示3个。但是,如果我选择:
FROM: 0500
TO: 1400
所有人都会表现出来。这样的事情可能吗?上面网站的插件会不会是我追求的?
答案 0 :(得分:1)
试试这个:
const timeStringToInt = (time) => {
const hoursMinutes = time.split(/[.:]/);
const hours = parseInt(hoursMinutes[0], 10) * 60;
var minutes = parseInt(hoursMinutes[1], 10);
return hours + minutes;
}
$.fn.dataTable.ext.search.push(
(settings, data, dataIndex) => {
const min = timeStringToInt($('#timeFrom').val());
const max = timeStringToInt($('#timeTo').val());
const start = timeStringToInt(data[0]);
const end = timeStringToInt(data[1]);
return start >= min && end <= max;
}
);
您可能需要根据小时列的位置更改功能。工作JSFiddle here。
修改
在查看你的数据后,我在最初的答案中犯了一个错误,这应该是这样做的:
const timeStringToInt = (time) => {
const hoursMinutes = time.split(":");
const hours = parseInt(hoursMinutes[0], 10) * 60;
var minutes = parseInt(hoursMinutes[1], 10);
return hours + minutes;
}
const stringToInt = (time) => {
var minutes = parseInt(time.slice(-2), 10);
const hours = parseInt(time.slice(0, -2), 10) * 60;
return hours + minutes;
}
$.fn.dataTable.ext.search.push(
(settings, data, dataIndex) => {
const min = timeStringToInt($('#timeFrom').val());
const max = timeStringToInt($('#timeTo').val());
const timeParts = data[0].split("-");
const start = stringToInt(timeParts[0]);
const end = stringToInt(timeParts[1]);
return start >= min && end <= max;
}
);
更新了JSFiddle here。
希望有所帮助: - )