<!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>