Javascript 使用d3.0滑块显示一天

Javascript 使用d3.0滑块显示一天,javascript,d3.js,Javascript,D3.js,我有我的地图,在地图上我可以显示一段时间内发生的一些事件。到目前为止,我使用的数据是这样过滤的 dpG = d3.time.format("%d.%m.%Y").parse; dpS = d3.time.format("%Y-%m-%d").parse; var minDate = dpG("01.01.2015"); var maxDate = dpG("31.12.2015"); var secondsInDay = 60 * 60 * 24; d3.select('#slider3').c

我有我的地图,在地图上我可以显示一段时间内发生的一些事件。到目前为止,我使用的数据是这样过滤的

dpG = d3.time.format("%d.%m.%Y").parse;
dpS = d3.time.format("%Y-%m-%d").parse;
var minDate = dpG("01.01.2015");
var maxDate = dpG("31.12.2015");
var secondsInDay = 60 * 60 * 24;
d3.select('#slider3').call(d3.slider()
  .axis(true).min(minDate).max(maxDate)
  .on("slide", function(evt, value) {
    newDataG = site_dataG.features.filter(function(d){
var date = (dpG(d.properties.date).getTime() === new Date(value).getTime());
      // console.log(date)
      //console.log(new Date(value));

      console.log(dpG(d.properties.date));
      return(date);
    });
    // newDataS = site_dataS.features.filter(function(d){
    //   return dpS(d.properties.Date) < new Date(value);
    // });
    // console.log(newDataG);
        // console.log("New set size ", newDataG.length);

    displaySitesG(newDataG);
    // displaySitesS(newDataS);
  })
);
newDataG = site_dataG.features.filter(function(d){
  var date = dpG(d.properties.date) == new Date(value);
  // console.log(date)
  //console.log(new Date(value));
  return(date);
});
结果证明根本不起作用

像这样的东西一次显示所有数据

var date = new Date(value);
其他文件是您需要查看的文件

编辑2:

date1 = Math.round(dpG(d.properties.date).getTime() / (1000*60*60*24));
date2 = Math.round(new Date(value).getTime() / (1000*60*60*24));
console.log(date1);
console.log(date2)
给我这个

直接检查相等性不适用于
date
对象:

var d1 = new Date();
var d2 = new Date(d1);
console.log(d1 == d2);   // false!
相反,如果要使用
==
,则需要使用th
date.getTime()
运算符=
==
==操作员:

var d1 = new Date();
var d2 = new Date(d1);
d1.getTime() === d2.getTime(); // true
因此,请尝试以下操作:(编辑以修复错误)


请注意,只有当
dpG(thing)
返回一个
Date
对象时,这才有效。

我使用moment.js使UnixTimeStamp变为偶数

下面是有帮助的代码片段

d3.select('#slider3').call(d3.slider()
.axis(true).min(minDate).max(maxDate)
.on("slide", function(evt, value) {
  sliderDate = moment(value,"x").utc().format("YYYY-MM-DD");
  newDataS = site_dataS.features.filter(function(d){

    //sliderDate = moment(value,"x").utc().format("YYYY-MM-DD");
    dataDate = d.properties.Date;
    //dataDateStampS = moment(dataDate).unix();

    if (dataDate == sliderDate) {
      return dpS(dataDate);
    }
  });
  displaySitesS(newDataS);
})
);

我遵循了你的提示,但我收到了以下错误消息
uncaughttypeerror:d.properties.date.getTime不是函数
对不起,我的建议应该是
dpG(d.properties.date).getTime()
。请参阅编辑后的答案。我仔细检查了一下,如果我记录了`dpG(d.properties.date)`我会得到一个日期对象。但当我记录日期时,我只得到'false'。我在上面添加了更多的代码。一种可能是您没有得到相等的值,因为
getTime()
以毫秒为单位提供时间。你可以试着将时间四舍五入到最接近的秒(或分钟?),除以1000(或1000*60,如果是分钟),看看这是否有效。这就是
Math.round(..getTime()/1000)
。另外,
值的格式是什么?如果它的格式是“DD.MM.YYYY”
,那么只进行字符串比较可能更有意义仍然为false
d3.select('#slider3').call(d3.slider()
.axis(true).min(minDate).max(maxDate)
.on("slide", function(evt, value) {
  sliderDate = moment(value,"x").utc().format("YYYY-MM-DD");
  newDataS = site_dataS.features.filter(function(d){

    //sliderDate = moment(value,"x").utc().format("YYYY-MM-DD");
    dataDate = d.properties.Date;
    //dataDateStampS = moment(dataDate).unix();

    if (dataDate == sliderDate) {
      return dpS(dataDate);
    }
  });
  displaySitesS(newDataS);
})
);