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!
相反,如果要使用==
,,则需要使用thdate.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);
})
);