Tick Positioner Test
by bakhshi
HTML
<script src="http://code.highcharts.com/3.0.5/highcharts.js"></script>
<script src="http://code.highcharts.com/modules/exporting.js"></script>
<div id="container" style="min-width: 310px; height: 400px; margin: 0 auto"></div>
JavaScript
Date.prototype.addHours = function (hours) {
this.setHour(this.getHour() + hours);
}
Date.prototype.addDays = function (days) {
this.setDate(this.getDate() + days);
}
Date.prototype.addMonths = function (months) {
this.setMonth(this.getMonth() + months);
}
Date.prototype.addYears = function (years) {
this.setFullYear(this.getFullYear() + years);
}
var dateRangeHour = 1000 * 3600,
dateRangeDay = dateRangeHour * 24,
dateRangeWeek = dateRangeDay * 7,
dateRangeMonth = dateRangeDay * 30,
dateRangeQuarter = dateRangeDay * 90,
dateRangeYear = dateRangeDay * 365,
dateIncrementer = {};
dateIncrementer[dateRangeHour] = function (date) {
date.addHours(1);
}
dateIncrementer[dateRangeDay] = function (date) {
date.addDays(1);
}
dateIncrementer[dateRangeWeek] = function (date) {
date.addDays(7);
}
dateIncrementer[dateRangeMonth] = function (date) {
date.addMonths(1);
}
dateIncrementer[dateRangeQuarter] = function (date) {
date.addMonths(3);
}
dateIncrementer[dateRangeYear] = function (date) {
date.addYears(1);
}
function decideRange(interval) {
if (interval > dateRangeYear || dateRangeYear - interval <= dateRangeYear / 2) return dateRangeYear;
if (interval > dateRangeQuarter || dateRangeQuarter - interval <= dateRangeQuarter / 2) return dateRangeQuarter;
if (interval > dateRangeMonth || dateRangeMonth - interval <= dateRangeMonth / 2) return dateRangeMonth;
if (interval > dateRangeWeek || dateRangeWeek - interval <= dateRangeWeek / 2) return dateRangeWeek;
if (interval > dateRangeDay || dateRangeDay - interval <= dateRangeDay / 2) return dateRangeDay;
return dateRangeHour;
}
function tickPositioner() {
var positions = [];
var min = new Date(this.min),
max = new Date(this.max);
var interval = decideRange(this.tickInterval);
var incrementer = dateIncrementer[interval];
for (var current = new Date(min.getTime()); current < max; incrementer(current))
...