-
-
Save mbostock/5827353 to your computer and use it in GitHub Desktop.
weekday = (function() { | |
// Returns the weekday number for the given date relative to January 1, 1970. | |
function weekday(date) { | |
var weekdays = weekdayOfYear(date), | |
year = date.getFullYear(); | |
while (--year >= 1970) weekdays += weekdaysInYear(year); | |
return weekdays; | |
} | |
// Returns the date for the specified weekday number relative to January 1, 1970. | |
weekday.invert = function(weekdays) { | |
var year = 1970, | |
yearWeekdays; | |
// Compute the year. | |
while ((yearWeekdays = weekdaysInYear(year)) <= weekdays) { | |
++year; | |
weekdays -= yearWeekdays; | |
} | |
// Compute the date from the remaining weekdays. | |
var days = weekdays % 5, | |
day0 = ((new Date(year, 0, 1)).getDay() + 6) % 7; | |
if (day0 + days > 4) days += 2; | |
return new Date(year, 0, (weekdays / 5 | 0) * 7 + days + 1); | |
}; | |
// Returns the number of weekdays in the specified year. | |
function weekdaysInYear(year) { | |
return weekdayOfYear(new Date(year, 11, 31)) + 1; | |
} | |
// Returns the weekday number for the given date relative to the start of the year. | |
function weekdayOfYear(date) { | |
var days = d3.time.dayOfYear(date), | |
weeks = days / 7 | 0, | |
day0 = (d3.time.year(date).getDay() + 6) % 7, | |
day1 = day0 + days - weeks * 7; | |
return Math.max(0, days - weeks * 2 | |
- (day0 <= 5 && day1 >= 5 || day0 <= 12 && day1 >= 12) // extra saturday | |
- (day0 <= 6 && day1 >= 6 || day0 <= 13 && day1 >= 13)); // extra sunday | |
} | |
return weekday; | |
})(); |
Hey Mike, sorry for posting on wrong thread. But my issue is related to d3.scaleLinear/d3.scaleTime. We are using D3 V4. Need to display date on x-axis and number on Y-axis. When set x-axis values to domain and specify ticks(5), I am facing 2 issues mentioned below.
- Sometimes ticks are more than 5 which I understood from D3 api that it is a limitation. This issue was addressed by using tickSize.
- But I am seeing dates on x-axis which are not in the input object. For example, I have dates 01/31, 02/01, 02/02, 02/05 and 02/06 (weekend dates were excluded), but x-axis is showing dates 02/03 and 02/04 which is not acceptable for my business.
Could you please us a direction to overcome this issue? Our organization just started using D3 so we have less help from our IT teams.
Hello,
It is awesome job but I cannot find a graph with Time frame such as H1, H4, D1, W1, M1.
Do you have plan to develop this sample ?
I need to know that How the Lib is support multiple time frame ?
And How we make UI tool overlay on graph area ?
if it able to support please let me know at [email protected]
I have a project that need your help with good wage if you interest.
Thank you,
Rocky
Hi Mike! There is a bug in
weekday.invert
function:Invert function result is off by +1 day in case when the first day of the year lands on Sunday. This is the case of 2012.
The bug is in line 25:
The fix is to add the check right after line 25:
I have successfully tested the fix this way: