D3.js - 获取某个月的天数

时间:2016-08-01 14:09:29

标签: date datetime d3.js

我正在使用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.

1 个答案:

答案 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>