import “../core/true”; import “../scale/linear”; import “format”; import “format-utc”; import “scale”;

var d3_time_scaleUTCMethods = d3_time_scaleLocalMethods.map(function(m) {

return [m[0].utc, m[1]];

});

var d3_time_scaleUTCFormats = [

[d3.time.format.utc("%Y"), d3_true],
[d3.time.format.utc("%B"), function(d) { return d.getUTCMonth(); }],
[d3.time.format.utc("%b %d"), function(d) { return d.getUTCDate() != 1; }],
[d3.time.format.utc("%a %d"), function(d) { return d.getUTCDay() && d.getUTCDate() != 1; }],
[d3.time.format.utc("%I %p"), function(d) { return d.getUTCHours(); }],
[d3.time.format.utc("%I:%M"), function(d) { return d.getUTCMinutes(); }],
[d3.time.format.utc(":%S"), function(d) { return d.getUTCSeconds(); }],
[d3.time.format.utc(".%L"), function(d) { return d.getUTCMilliseconds(); }]

];

var d3_time_scaleUTCFormat = d3_time_scaleFormat(d3_time_scaleUTCFormats);

function d3_time_scaleUTCSetYear(y) {

var d = new Date(Date.UTC(y, 0, 1));
d.setUTCFullYear(y); // Y2K fail
return d;

}

function d3_time_scaleUTCGetYear(d) {

var y = d.getUTCFullYear(),
    d0 = d3_time_scaleUTCSetYear(y),
    d1 = d3_time_scaleUTCSetYear(y + 1);
return y + (d - d0) / (d1 - d0);

}

d3_time_scaleUTCMethods.year = function(extent, m) {

return d3_time_scaleLinear.domain(extent.map(d3_time_scaleUTCGetYear)).ticks(m).map(d3_time_scaleUTCSetYear);

};

d3.time.scale.utc = function() {

return d3_time_scale(d3.scale.linear(), d3_time_scaleUTCMethods, d3_time_scaleUTCFormat);

};