Javascript d3图表';的工具提示无法正确解析2009年2月
我有一个面积图,可以正确解析工具提示的日期——除非是在2009年2月 下面是一个Plunker演示问题: 我认为,这里是有问题的代码:Javascript d3图表';的工具提示无法正确解析2009年2月,javascript,d3.js,Javascript,D3.js,我有一个面积图,可以正确解析工具提示的日期——除非是在2009年2月 下面是一个Plunker演示问题: 我认为,这里是有问题的代码: var mousex = d3.mouse(this); mousex = mousex[0] ;//+ 3; //7 var invertedx = xScale.invert(mousex); var invertedxmo = xScale.invert(mousex); var invertedxyr = xScale.invert(
var mousex = d3.mouse(this);
mousex = mousex[0] ;//+ 3; //7
var invertedx = xScale.invert(mousex);
var invertedxmo = xScale.invert(mousex);
var invertedxyr = xScale.invert(mousex);
function getMonth(date) {
var month = date.getMonth() + 1;
return month < 10 ? '0' + month : '' + month;
}
invertedx = ("" + (invertedx.getMonth() + 1)).slice(-2) + '/' + invertedx.getFullYear();
var selected = (d.values);
for (var k = 0; k < selected.length; k++) {
dates[k] = selected[k].x
dates[k] = ("" + (dates[k].getMonth() + 1)).slice(-2) + '/' + dates[k].getFullYear();
}
invertedxmo = ("" + (invertedxmo.getMonth() + 1)).slice(-2) ;
var selectedmo = (d.values);
for (var m = 0; k < selectedmo.length; k++) {
dates[m] = selectedmo[m].x
dates[m] = ("" + (dates[m].getMonth() + 1)).slice(-2) ;
}
invertedxyr = invertedxyr.getFullYear();
mousedate = dates.indexOf(invertedx);
pro = d.values[mousedate].y
var monthNames = ["January", "February", "March", "April", "May", "June",
"July", "August", "September", "October", "November", "December"
];
var mousex=d3.mouse(此);
mousex=mousex[0];/+3; //7.
var INVERTDX=xScale.invert(鼠标);
var INVERTDXMO=xScale.invert(mousex);
var invertedxyr=xScale.inverte(mousex);
函数getMonth(日期){
var month=date.getMonth()+1;
返回月份<10?'0'+月份:''+月份;
}
invertedx=(“”+(invertedx.getMonth()+1)).slice(-2)+'/'+invertedx.getFullYear();
所选var=(d.值);
对于(var k=0;k
我尝试过更改切片(-2)
,这解决了2009年2月的问题,但也为解析每年12月的日期带来了新问题
有人能演示如何解决这个问题吗
编辑/更新:
有趣的是,当我修改图表的日期范围时,我将第16行从var startDate=d3.time.month.offset(new date(),-108)改为代码>至var startDate=d3.time.month.offset(新日期(),-119)代码>,然后2009年2月解析得很好-但是2008年2月抛出了一个错误!同样,如果我通过将第16行的偏移量值更改为-98
,来缩小日期范围:2010年2月将抛出一个错误,但所有后续的二月解析都很好,其他所有日期也是如此。(显然,如果使用滑块缩小日期范围,则错误仍将仅发生在最初加载图表时显示的2月1日,即滑块移动之前。)
因此,无论日期范围是否在2008年、2009年、2010年等,似乎总是图表上的第一个2月产生此错误。第一个2月之后的所有后续2月都被解析得很好。鼠标悬停代码中的代码没有问题。问题在于日期
今天的日期是30号,您生成开始日期的方式是:
d3.time.month.offset(new Date(), -108);
i、 e.它以太阳2008年11月30日16:46:58 GMT-0500(美国东部时间)
开始,并按以下方式进行:
Sun Nov 30 2008 16:52:32 GMT-0500 (EST)
Tue Dec 30 2008 16:52:32 GMT-0500 (EST)
Fri Jan 30 2009 16:52:32 GMT-0500 (EST)
Mon Mar 02 2009 16:52:32 GMT-0500 (EST)
Thu Apr 02 2009 16:52:32 GMT-0400 (EDT)
.....
由于在2009年2月找不到第30天,它最终会在2009年3月2日开始选择,从那时起,每个月的第2天都会选择,这肯定会包括所有的2月。(在createDatesArr
函数中)
一种方法是从每月的第一天开始
相关代码:
var currentDate = new Date();
var firstDay = new Date(currentDate.getFullYear(), currentDate.getMonth(), 1);
var startDate = d3.time.month.offset(firstDay, -108);
更新
希望这有帮助。:) 这很有效,非常感谢!奇怪的是,我实际上注意到这个问题是在本周的周一,也就是11月27日开始出现的。我想2月27日和28日刚好接近29日和30日,触发了一些意想不到的边界行为。很高兴我能帮上忙!不,这是一个用11月27日来决定开始日期的例子。它没有搞砸,那可能是别的东西(不确定是什么)。尽可能多地使用控制台日志/添加断点,这有助于进行大量调试。