如何将最后几个月计算为一个期间,并通过javascript更新图表
我需要根据时间段更新图表 目前,图表正在更新从1月到12月的3,6,9,12个月的所有值 现在我需要更新图表 最后3个月-表示当前月份是12月,所以我需要得到12月、11月和10月的图表 过去6个月12月、11月、10月、9月、8月、7月 过去9个月12月、11月、10月、9月、8月、7月、6月、5月、4月 一月到本月获取一月到本月的图表 我已经在计算当前月份了,但我不知道如何附加到图表上 我调用同一个图表函数的另一件事是,有一种方法可以减少代码。我试过了,但没能弄明白 谢谢你的帮助 JSFIDLE Html如何将最后几个月计算为一个期间,并通过javascript更新图表,javascript,jquery,Javascript,Jquery,我需要根据时间段更新图表 目前,图表正在更新从1月到12月的3,6,9,12个月的所有值 现在我需要更新图表 最后3个月-表示当前月份是12月,所以我需要得到12月、11月和10月的图表 过去6个月12月、11月、10月、9月、8月、7月 过去9个月12月、11月、10月、9月、8月、7月、6月、5月、4月 一月到本月获取一月到本月的图表 我已经在计算当前月份了,但我不知道如何附加到图表上 我调用同一个图表函数的另一件事是,有一种方法可以减少代码。我试过了,但没能弄明白 谢谢你的帮助 JSFID
@dm4web的解决方案运行良好。最后一个请求解决方案是:在第一行添加这个
var currentMonth = new Date().getMonth();
$('#SelectPeriod').find('option:first').val(currentMonth +1);
p、 添加了s.currentMonth+1,因为引用是一月。如果要从二月到月份,必须使用like.valcurrentMonth+1更新2:
HTML:
谢谢@dm4web,它工作得很好。但是我需要得到我在1月到这个月的问题中提到的另一个值。你能告诉我怎么做吗?非常感谢,很抱歉更新太晚了。有什么办法可以让我少写代码吗?谢谢你,对不起,我没有足够的声望点数来弥补我的投票。如果可能的话,让我知道如何减少代码。我调用同一个图表函数,三次,有没有办法减少代码。
var data = [
['data4', 'data2', 'data3'],
[90, 120, 300],
[40, 160, 240],
[50, 200, 290],
[120, 160, 230],
[80, 130, 300],
[90, 220, 320],
[90, 120, 300],
[40, 160, 240],
[50, 200, 290],
[120, 160, 230],
[80, 130, 300],
[90, 220, 320]
];
//calculating current month
var currentMonth = new Date().getMonth();
console.log(currentMonth);
//c3 customisation
var chart = c3.generate({
bindto : '#chart',
data : {
rows : data,
type : 'bar',
},
axis : {
x : {
tick : {
format : function (d) {
return formatMonth(d);
}
}
}
}
});
//select chart type
$("#chartType").change(function (evt) {
var chartSelection = $("#chartType").val();
var timePeriod = $("#SelectPeriod").val();
var chart = c3.generate({
data : {
rows : data.slice(0, parseInt(timePeriod) + 1),
type : chartSelection
},
axis : {
x : {
tick : {
format : function (d) {
return formatMonth(d);
}
}
}
}
});
});
//select time period
$("#SelectPeriod").change(function (evt) {
var chartSelection = $("#chartType").val();
var timePeriod = $("#SelectPeriod").val();
var chart = c3.generate({
data : {
rows : data.slice(0, parseInt(timePeriod) + 1),
type : chartSelection
},
axis : {
x : {
tick : {
format : function (d) {
return formatMonth(d);
}
}
}
}
});
});
//function for months
function formatMonth(d) {
if (!d) {
return "JAN";
}
var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
return month = months[d];
}
var currentMonth = new Date().getMonth();
$('#SelectPeriod').find('option:first').val(currentMonth +1);
<select id="SelectPeriod">
<option value="-1">January to this month</option>
<option value="3">Last 3 months</option>
<option value="6">Last 6 months</option>
<option value="9">Last 9 months</option>
<option value="12">Last 12 months</option>
</select>
//select time period
$("#SelectPeriod").change(function (evt) {
var chartSelection = $("#chartType").val();
var timePeriod = $("#SelectPeriod").val();
if (timePeriod == -1) timePeriod = currentMonth + 1;
var end=currentMonth+2;
var start=end-timePeriod;
var data2=[];
data2.push(data[0]);
data2=data2.concat(data.slice(start, end));
//alert(start+'/'+end+'='+data2)
var chart = c3.generate({
data: {
rows: data2,
type: chartSelection
},
axis: {
x: {
tick: {
format: function (d) {
return formatMonth(d);
}
}
}
}
});
});
//function for months
function formatMonth(d) {
var timePeriod = $("#SelectPeriod").val();
if (timePeriod == -1) timePeriod = currentMonth + 1;
timePeriod--;
d=currentMonth-timePeriod+d;
if (!d) {
return "JAN";
}
var months = ["JAN", "FEB", "MAR", "APR", "MAY", "JUN", "JUL", "AUG", "SEP", "OCT", "NOV", "DEC"];
return month = months[d];
}