我正在使用D3.js (v3)绘制时间序列图,我正在试图找出给定月份(即天)所需的刻度数量。根据我对the documentation所做的,d3.time-month
应该会在28到31天之间返回一些东西,这就是我想要的东西,但由于某些原因我显然很想念,我似乎无法得到我需要的数字。
有人可以帮忙吗?
这是我到目前为止所得到的:
console.log(date); // Fri Jul 01 2016 00:00:00 GMT+0100 (WEST)
monthDays = d3.time.month(date);
console.log(currentMonth+" has "+monthDays+" days."); // July has Fri Jul 01 2016 00:00:00 GMT+0100 (WEST) days.
答案 0 :(得分:1)
您误读了intervals上的文档:d3.time.month
使用的时间间隔内的天数长度介于28和31之间,但函数定义为
interval(date)
interval.floor(date)
的别名。 [...]
和
interval.floor(date)
缩小指定日期,返回最新时间间隔 在日期之前或之前。 [...]
基本上,d3.time.month(date)
将在午夜返回该月的第一天,而不是该月的天数。
如何获得天数呢?据我所知,D3没有公开获得给定日期的月份长度的方法。您当然可以获得给定月份的天数范围并提取其长度:
var date = new Date(2016, 01, 02); // 2016-02-02
console.log(
d3.time.days(d3.time.month(date), d3.time.month.ceil(date)).length
)
或者可能更有效地使用普通JS,就像在这个答案中https://stackoverflow.com/a/1185804/1071630:
var date = new Date(2016, 01, 02); // 2016-02-02
console.log(
new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()
)
var date = new Date(2016, 01, 02);
console.log(
d3.time.days(d3.time.month(date), d3.time.month.ceil(date)).length
)
console.log(
new Date(date.getFullYear(), date.getMonth()+1, 0).getDate()
)
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/3.4.11/d3.min.js"></script>