Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript d3图表';的工具提示无法正确解析2009年2月_Javascript_D3.js - Fatal编程技术网

Javascript d3图表';的工具提示无法正确解析2009年2月

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(

我有一个面积图,可以正确解析工具提示的日期——除非是在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(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日来决定开始日期的例子。它没有搞砸,那可能是别的东西(不确定是什么)。尽可能多地使用控制台日志/添加断点,这有助于进行大量调试。