gpt4 book ai didi

javascript - 从最小日期开始添加一个月的填充

转载 作者:行者123 更新时间:2023-11-29 23:00:02 25 4
gpt4 key购买 nike

首先,我想动态处理任何类型的时态数据集的日期范围。我使用以下方法实现了这一点:

var earliest = d3.min(data.map(d=>d.date));
var latest = d3.max(data.map(d=>d.date));

然后我想添加一个月的填充,这样数据就不会看起来那么不稳定地卡在边缘上。所以我尝试了:

var dateMin = earliest;
var dateMax = latest;

dateMin.setDate(dateMin.getMonth()-30);
dateMax.setDate(dateMax.getMonth()+30);

看起来秤仍然记得初始的 earliest 值,即使我复制了它。也就是说,所有这一切最终所做的只是将我的数据点更改为更早的日期,这意味着结果没有改变;它仍然悬在边缘。

问题

有没有一种万无一失的方法可以用来计算比例,以便有额外的 30 天填充?

最佳答案

关于您的问题:earliestdateMin 指向同一个对象。改变一个会改变另一个:

var earliest = new Date();
var dateMin = earliest;
dateMin.setDate(dateMin.getMonth() - 30);
console.log(earliest);

当然,这与D3无关,这是JavaScript的特性。而D3提供了一种方法,不仅更简单,而且避免了此类错误。

一种D3的傻瓜方式:

你应该使用 interval.offset ,其中:

Returns a new date equal to date plus step intervals.

例如,增加 30 天:

const date = new Date();
const datePlus30Days = d3.timeDay.offset(date, 30);
console.log(datePlus30Days)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

或者,删除 30 天:

const date = new Date();
const dateMinus30Days = d3.timeDay.offset(date, -30);
console.log(dateMinus30Days)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>

因此,在您的体重秤中,使用:

var dateMin = d3.min(data, function(d){
return d3.timeDay.offset(d.date, -30);
});

var dateMax = d3.max(data, function(d){
return d3.timeDay.offset(d.date, 30);
});

关于javascript - 从最小日期开始添加一个月的填充,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55860345/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com