| <!DOCTYPE html> |
| <meta charset="utf-8"> |
| <link href="../src/nv.d3.css" rel="stylesheet" type="text/css"> |
| <style> |
| |
| </style> |
| |
| <body> |
| |
| |
| <script src="../lib/d3.v2.js"></script> |
| <script src="../nv.d3.js"></script> |
| <script> |
| |
| function ilog(text) { |
| console.log(text); |
| return text; |
| } |
| |
| |
| function daysInMonth(month,year) { |
| var m = [31,28,31,30,31,30,31,31,30,31,30,31]; |
| if (month != 2) return m[month - 1]; |
| if (year%4 != 0) return m[1]; |
| if (year%100 == 0 && year%400 != 0) return m[1]; |
| return m[1] + 1; |
| } |
| |
| |
| function d3_time_range(floor, step, number) { |
| return function(t0, t1, dt) { |
| var time = floor(t0), times = []; |
| if (time < t0) step(time); |
| if (dt > 1) { |
| while (time < t1) { |
| var date = new Date(+time); |
| if (!(number(date) % dt)) times.push(date); |
| step(time); |
| } |
| } else { |
| while (time < t1) times.push(new Date(+time)), step(time); |
| } |
| return times; |
| }; |
| } |
| |
| |
| d3.time.monthEnd = function(date) { |
| return new Date(date.getFullYear(), date.getMonth(), 0); |
| }; |
| |
| |
| d3.time.monthEnds = d3_time_range(d3.time.monthEnd, function(date) { |
| date.setUTCDate(date.getUTCDate() + 1); |
| date.setDate(daysInMonth(date.getMonth() + 1, date.getFullYear())); |
| }, function(date) { |
| return date.getMonth(); |
| } |
| ); |
| |
| |
| |
| |
| var margin = {top: 10, right: 40, bottom: 40, left: 40}, |
| width = 960 - margin.left - margin.right, |
| height = 80 - margin.top - margin.bottom; |
| |
| var x = d3.time.scale() |
| .domain([new Date(2010, 0, 1), new Date(2011, 0, 1)]) |
| .range([0, width]); |
| |
| var xAxis = d3.svg.axis() |
| .scale(x) |
| .orient("bottom") |
| //.ticks(d3.time.months) |
| .ticks(d3.time.monthEnds) |
| //.tickSubdivide(3) |
| .tickSize(8, 4, 0) |
| .tickFormat(d3.time.format("%x")); |
| //.tickFormat(d3.time.format("%B")); |
| |
| var svg = d3.select("body").append("svg") |
| .attr("width", width + margin.left + margin.right) |
| .attr("height", height + margin.top + margin.bottom) |
| .append("g") |
| .attr("transform", "translate(" + margin.left + "," + margin.top + ")"); |
| |
| svg.append("g") |
| .attr("class", "x axis") |
| .attr("transform", "translate(0," + height + ")") |
| .call(xAxis) |
| |
| .selectAll("text") |
| .attr("text-anchor", "middle") |
| //.attr("text-anchor", "start") |
| .attr("x", 0) |
| .attr("y", 12); |
| |
| </script> |