如何使用日期选择器过滤 chart.js?
How to filter chart.js with datepicker?
我是编程新手。我有一张由 chart.js 使用 API 的数据制作的图表。这是我的 API URL:https://gmlews.com/api/data/?node_id=1
我想根据 API 绘制图表上的水分数据。 y 轴用于湿度数据,X 轴来自我在 API 上的时间戳。我尝试使用日期选择器来管理要在图表上显示的数据。
到目前为止,这是我的代码:
$(function() {
$('input[name="datefilter"]').daterangepicker({
showDropdowns : true,
autoUpdateInput: false,
locale: {
cancelLabel: 'Clear'
}
});
$('input[name="datefilter"]').on('apply.daterangepicker', function(ev, picker) {
$(this).val(picker.startDate.format('DD/MM/YYYY') + ' - ' + picker.endDate.format('DD/MM/YYYY'));
var fromDate = picker.startDate.format('DD/MM/YYYY');
var toDate = picker.endDate.format('DD/MM/YYY');
if (fromDate != '' && toDate != '') {
console.log(fromDate, toDate);
var endpoint = 'https://gmlews.com/api/data/?node_id=1';
$.ajax({
method: "GET",
url: endpoint,
data: {
fromDate: fromDate,
toDate: toDate
},
success: function(data){
console.log(data); //get all data
//get data by fields
var hum = [], time = [];
for (var i=0; i<data.length; i++){
hum.push(data[i].moisture);
time.push(data[i].timestamp);
}
console.log(hum);
console.log(time);
//plot the chart
var ctx = document.getElementById("moistureChart").getContext('2d');
var moistureChart = new Chart(ctx, {
type: 'line',
data: {
labels: time,
datasets: [{
label: 'kelembaban',
data: hum,
backgroundColor: [
'#ff000000'
],
borderColor: [
'#331698'
],
borderCapStyle: 'round',
borderWidth: 1
}]
},
options: {
reponsive: true,
scales: {
yAxes: [{
ticks: {
beginAtZero:false,
stepSize:10
},
scaleLabel: {
display: true,
labelString: 'kelembaban'
}
}],
xAxes: [{
display: true,
type: "time",
time: {
minUnit: "hour",
unit: "hour",
unitStepSize: 6,
min: moment(fromDate).toDate(),//Date object type
max: moment(toDate).toDate()//Date object type
},
scaleLabel: {
display: true,
labelString: 'Time'
}
}]
}
}
});
},
error: function(error_data){
console.log(error_data)
}
});
} //if function
}); //tombol apply
$('input[name="datefilter"]').on('cancel.daterangepicker', function(ev, picker) {
$(this).val('');
});
});
您可以从此处的 fiddle 访问代码:https://jsfiddle.net/estri012/ftu8g74c/5/
问题是当我尝试从 datepicker 中选择日期时,例如:日期从 5 月 7 日到 5 月 8 日。它不会加载任何内容,但实际上 API 中 7 月 7 日的数据是存在的。然后当我尝试选择从 5 月 13 日到 5 月 14 日的日期时,日期选择器过滤器不起作用,它只显示我在 API 中的所有数据。你能帮我解决这个问题吗?谢谢!
首先,您试图通过发送 fromDate 和 toDate 参数从 API 过滤数据。
我达到了 https://gmlews.com/api/data/?node_id=1 但没有找到有关可以使用的参数的文档。
如果我尝试使用 &fromDate=2020-05-29&toDate=2020-05-29 进行 GET,我将收到与调用不带参数的端点相同的数据。
在 POST.
中相同
您不应该发送时间戳而不是日期格式吗?
您的格式化日期是 YYYY-MM-DD 格式吗?
我是编程新手。我有一张由 chart.js 使用 API 的数据制作的图表。这是我的 API URL:https://gmlews.com/api/data/?node_id=1
我想根据 API 绘制图表上的水分数据。 y 轴用于湿度数据,X 轴来自我在 API 上的时间戳。我尝试使用日期选择器来管理要在图表上显示的数据。
到目前为止,这是我的代码:
$(function() {
$('input[name="datefilter"]').daterangepicker({
showDropdowns : true,
autoUpdateInput: false,
locale: {
cancelLabel: 'Clear'
}
});
$('input[name="datefilter"]').on('apply.daterangepicker', function(ev, picker) {
$(this).val(picker.startDate.format('DD/MM/YYYY') + ' - ' + picker.endDate.format('DD/MM/YYYY'));
var fromDate = picker.startDate.format('DD/MM/YYYY');
var toDate = picker.endDate.format('DD/MM/YYY');
if (fromDate != '' && toDate != '') {
console.log(fromDate, toDate);
var endpoint = 'https://gmlews.com/api/data/?node_id=1';
$.ajax({
method: "GET",
url: endpoint,
data: {
fromDate: fromDate,
toDate: toDate
},
success: function(data){
console.log(data); //get all data
//get data by fields
var hum = [], time = [];
for (var i=0; i<data.length; i++){
hum.push(data[i].moisture);
time.push(data[i].timestamp);
}
console.log(hum);
console.log(time);
//plot the chart
var ctx = document.getElementById("moistureChart").getContext('2d');
var moistureChart = new Chart(ctx, {
type: 'line',
data: {
labels: time,
datasets: [{
label: 'kelembaban',
data: hum,
backgroundColor: [
'#ff000000'
],
borderColor: [
'#331698'
],
borderCapStyle: 'round',
borderWidth: 1
}]
},
options: {
reponsive: true,
scales: {
yAxes: [{
ticks: {
beginAtZero:false,
stepSize:10
},
scaleLabel: {
display: true,
labelString: 'kelembaban'
}
}],
xAxes: [{
display: true,
type: "time",
time: {
minUnit: "hour",
unit: "hour",
unitStepSize: 6,
min: moment(fromDate).toDate(),//Date object type
max: moment(toDate).toDate()//Date object type
},
scaleLabel: {
display: true,
labelString: 'Time'
}
}]
}
}
});
},
error: function(error_data){
console.log(error_data)
}
});
} //if function
}); //tombol apply
$('input[name="datefilter"]').on('cancel.daterangepicker', function(ev, picker) {
$(this).val('');
});
});
您可以从此处的 fiddle 访问代码:https://jsfiddle.net/estri012/ftu8g74c/5/
问题是当我尝试从 datepicker 中选择日期时,例如:日期从 5 月 7 日到 5 月 8 日。它不会加载任何内容,但实际上 API 中 7 月 7 日的数据是存在的。然后当我尝试选择从 5 月 13 日到 5 月 14 日的日期时,日期选择器过滤器不起作用,它只显示我在 API 中的所有数据。你能帮我解决这个问题吗?谢谢!
首先,您试图通过发送 fromDate 和 toDate 参数从 API 过滤数据。 我达到了 https://gmlews.com/api/data/?node_id=1 但没有找到有关可以使用的参数的文档。
如果我尝试使用 &fromDate=2020-05-29&toDate=2020-05-29 进行 GET,我将收到与调用不带参数的端点相同的数据。 在 POST.
中相同您不应该发送时间戳而不是日期格式吗?
您的格式化日期是 YYYY-MM-DD 格式吗?