This commit is contained in:
Mike Bostock 2012-02-18 21:23:17 -08:00
Родитель 0e4fc7cdc6
Коммит 35dfb87d50
18 изменённых файлов: 559 добавлений и 209 удалений

54
d3.v2.js поставляемый
Просмотреть файл

@ -8524,6 +8524,7 @@ d3_time_utc.prototype = {
getMinutes: function() { return this._.getUTCMinutes(); },
getMonth: function() { return this._.getUTCMonth(); },
getSeconds: function() { return this._.getUTCSeconds(); },
getTime: function() { return this._.getTime(); },
getTimezoneOffset: function() { return 0; },
valueOf: function() { return this._.valueOf(); },
setDate: function(x) { this._.setUTCDate(x); },
@ -8533,7 +8534,8 @@ d3_time_utc.prototype = {
setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
setMinutes: function(x) { this._.setUTCMinutes(x); },
setMonth: function(x) { this._.setUTCMonth(x); },
setSeconds: function(x) { this._.setUTCSeconds(x); }
setSeconds: function(x) { this._.setUTCSeconds(x); },
setTime: function(x) { this._.setTime(x); }
};
d3.time.format = function(template) {
var n = template.length;
@ -8903,25 +8905,35 @@ d3_time_formatIsoNative.parse = function(string) {
};
d3_time_formatIsoNative.toString = d3_time_formatIso.toString;
function d3_time_interval(floor) {
function d3_time_interval(floor, step) {
function ceil(date) {
step(date = floor(new d3_time(date - 1)));
return date;
}
floor.floor = floor;
floor.ceil = ceil;
// floor.ceil = function(date) { return step(floor(new Date(date - 1))); };
floor.utc = function(date) {
try {
d3_time = d3_time_utc;
d3_time_interval_utc._ = date;
return floor(d3_time_interval_utc)._;
} finally {
d3_time = Date;
}
};
floor.utc = d3_time_interval_utc(floor);
floor.floor.utc = floor.utc;
floor.ceil.utc = d3_time_interval_utc(ceil);
return floor;
}
var d3_time_interval_utc = new d3_time_utc();
function d3_time_interval_utc(method) {
var utc = new d3_time_utc();
return function(date) {
try {
d3_time = d3_time_utc;
utc._ = date;
return method(utc)._;
} finally {
d3_time = Date;
}
};
}
function d3_time_range(floor, step, number) {
return function(t0, t1, dt) {
var time = floor(t0), times = [];
@ -8940,6 +8952,8 @@ function d3_time_range(floor, step, number) {
}
d3.time.second = d3_time_interval(function(date) {
return new d3_time(Math.floor(date / 1e3) * 1e3);
}, function(date) {
date.setSeconds(date.getSeconds() + 1);
});
d3.time.seconds = d3_time_range(d3.time.second, function(date) {
date.setTime(date.getTime() + 1e3);
@ -8950,6 +8964,8 @@ d3.time.seconds = d3_time_range(d3.time.second, function(date) {
d3.time.seconds.utc = d3.time.seconds;
d3.time.minute = d3_time_interval(function(date) {
return new d3_time(Math.floor(date / 6e4) * 6e4);
}, function(date) {
date.setMinutes(date.getMinutes() + 1);
});
d3.time.minutes = d3_time_range(d3.time.minute, d3_time_minutesStep, function(date) {
return date.getMinutes();
@ -8965,6 +8981,8 @@ function d3_time_minutesStep(date) {
d3.time.hour = d3_time_interval(function(date) {
var timezone = date.getTimezoneOffset() / 60;
return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
}, function(date) {
date.setTime(date.getTime() + 36e5); // can't use setHours because of DST
});
d3.time.hours = d3_time_range(d3.time.hour, d3_time_hoursStep, function(date) {
return date.getHours();
@ -8979,6 +8997,8 @@ function d3_time_hoursStep(date) {
}
d3.time.day = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), date.getMonth(), date.getDate());
}, function(date) {
date.setDate(date.getDate() + 1);
});
d3.time.days = d3_time_range(d3.time.day, function(date) {
date.setDate(date.getDate() + 1);
@ -8994,6 +9014,8 @@ d3.time.days.utc = d3_time_range(d3.time.day.utc, function(date) {
d3.time.week = d3_time_interval(function(date) {
(date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
return date;
}, function(date) {
date.setDate(date.getDate() + 7);
});
d3.time.weeks = d3_time_range(d3.time.week, function(date) {
date.setDate(date.getDate() + 7);
@ -9008,6 +9030,8 @@ d3.time.weeks.utc = d3_time_range(d3.time.week.utc, function(date) {
});
d3.time.month = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), date.getMonth(), 1);
}, function(date) {
date.setMonth(date.getMonth() + 1);
});
d3.time.months = d3_time_range(d3.time.month, function(date) {
date.setMonth(date.getMonth() + 1);
@ -9022,6 +9046,8 @@ d3.time.months.utc = d3_time_range(d3.time.month.utc, function(date) {
});
d3.time.year = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), 0, 1);
}, function(date) {
date.setFullYear(date.getFullYear() + 1);
});
d3.time.years = d3_time_range(d3.time.year, function(date) {
date.setFullYear(date.getFullYear() + 1);

6
d3.v2.min.js поставляемый

Различия файлов скрыты, потому что одна или несколько строк слишком длинны

Просмотреть файл

@ -1,3 +1,5 @@
d3.time.day = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), date.getMonth(), date.getDate());
}, function(date) {
date.setDate(date.getDate() + 1);
});

Просмотреть файл

@ -1,4 +1,6 @@
d3.time.hour = d3_time_interval(function(date) {
var timezone = date.getTimezoneOffset() / 60;
return new d3_time((Math.floor(date / 36e5 - timezone) + timezone) * 36e5);
}, function(date) {
date.setTime(date.getTime() + 36e5); // can't use setHours because of DST
});

Просмотреть файл

@ -1,19 +1,29 @@
function d3_time_interval(floor) {
function d3_time_interval(floor, step) {
function ceil(date) {
step(date = floor(new d3_time(date - 1)));
return date;
}
floor.floor = floor;
floor.ceil = ceil;
// floor.ceil = function(date) { return step(floor(new Date(date - 1))); };
floor.utc = function(date) {
try {
d3_time = d3_time_utc;
d3_time_interval_utc._ = date;
return floor(d3_time_interval_utc)._;
} finally {
d3_time = Date;
}
};
floor.utc = d3_time_interval_utc(floor);
floor.floor.utc = floor.utc;
floor.ceil.utc = d3_time_interval_utc(ceil);
return floor;
}
var d3_time_interval_utc = new d3_time_utc();
function d3_time_interval_utc(method) {
var utc = new d3_time_utc();
return function(date) {
try {
d3_time = d3_time_utc;
utc._ = date;
return method(utc)._;
} finally {
d3_time = Date;
}
};
}

Просмотреть файл

@ -1,3 +1,5 @@
d3.time.minute = d3_time_interval(function(date) {
return new d3_time(Math.floor(date / 6e4) * 6e4);
}, function(date) {
date.setMinutes(date.getMinutes() + 1);
});

Просмотреть файл

@ -1,3 +1,5 @@
d3.time.month = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), date.getMonth(), 1);
}, function(date) {
date.setMonth(date.getMonth() + 1);
});

Просмотреть файл

@ -1,3 +1,5 @@
d3.time.second = d3_time_interval(function(date) {
return new d3_time(Math.floor(date / 1e3) * 1e3);
}, function(date) {
date.setSeconds(date.getSeconds() + 1);
});

Просмотреть файл

@ -17,6 +17,7 @@ d3_time_utc.prototype = {
getMinutes: function() { return this._.getUTCMinutes(); },
getMonth: function() { return this._.getUTCMonth(); },
getSeconds: function() { return this._.getUTCSeconds(); },
getTime: function() { return this._.getTime(); },
getTimezoneOffset: function() { return 0; },
valueOf: function() { return this._.valueOf(); },
setDate: function(x) { this._.setUTCDate(x); },
@ -26,5 +27,6 @@ d3_time_utc.prototype = {
setMilliseconds: function(x) { this._.setUTCMilliseconds(x); },
setMinutes: function(x) { this._.setUTCMinutes(x); },
setMonth: function(x) { this._.setUTCMonth(x); },
setSeconds: function(x) { this._.setUTCSeconds(x); }
setSeconds: function(x) { this._.setUTCSeconds(x); },
setTime: function(x) { this._.setTime(x); }
};

Просмотреть файл

@ -1,4 +1,6 @@
d3.time.week = d3_time_interval(function(date) {
(date = d3.time.day(date)).setDate(date.getDate() - date.getDay());
return date;
}, function(date) {
date.setDate(date.getDate() + 7);
});

Просмотреть файл

@ -1,3 +1,5 @@
d3.time.year = d3_time_interval(function(date) {
return new d3_time(date.getFullYear(), 0, 1);
}, function(date) {
date.setFullYear(date.getFullYear() + 1);
});

Просмотреть файл

@ -10,54 +10,106 @@ suite.addBatch({
topic: function() {
return d3.time.day;
},
"returns midnights": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23)), local(2010, 11, 31));
assert.deepEqual(floor(local(2011, 0, 1, 0)), local(2011, 0, 1));
assert.deepEqual(floor(local(2011, 0, 1, 1)), local(2011, 0, 1));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"observes start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 7)), local(2011, 2, 12));
assert.deepEqual(floor(utc(2011, 2, 13, 8)), local(2011, 2, 13));
assert.deepEqual(floor(utc(2011, 2, 13, 9)), local(2011, 2, 13));
assert.deepEqual(floor(utc(2011, 2, 13, 10)), local(2011, 2, 13));
},
"observes end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 7)), local(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 8)), local(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 9)), local(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 10)), local(2011, 10, 6));
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns midnights": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23)), utc(2010, 11, 31));
assert.deepEqual(floor(utc(2011, 0, 1, 0)), utc(2011, 0, 1));
assert.deepEqual(floor(utc(2011, 0, 1, 1)), utc(2011, 0, 1));
assert.deepEqual(floor(local(2010, 11, 31, 23)), local(2010, 11, 31));
assert.deepEqual(floor(local(2011, 00, 01, 00)), local(2011, 00, 01));
assert.deepEqual(floor(local(2011, 00, 01, 01)), local(2011, 00, 01));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 7)), utc(2011, 2, 13));
assert.deepEqual(floor(utc(2011, 2, 13, 8)), utc(2011, 2, 13));
assert.deepEqual(floor(utc(2011, 2, 13, 9)), utc(2011, 2, 13));
assert.deepEqual(floor(utc(2011, 2, 13, 10)), utc(2011, 2, 13));
"observes start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 07)), local(2011, 02, 12));
assert.deepEqual(floor(utc(2011, 02, 13, 08)), local(2011, 02, 13));
assert.deepEqual(floor(utc(2011, 02, 13, 09)), local(2011, 02, 13));
assert.deepEqual(floor(utc(2011, 02, 13, 10)), local(2011, 02, 13));
},
"does not observe the end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 5)), utc(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 6)), utc(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 7)), utc(2011, 10, 6));
assert.deepEqual(floor(utc(2011, 10, 6, 8)), utc(2011, 10, 6));
"observes end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 07)), local(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 08)), local(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 09)), local(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 10)), local(2011, 10, 06));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns midnights": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23)), utc(2010, 11, 31));
assert.deepEqual(floor(utc(2011, 00, 01, 00)), utc(2011, 00, 01));
assert.deepEqual(floor(utc(2011, 00, 01, 01)), utc(2011, 00, 01));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 07)), utc(2011, 02, 13));
assert.deepEqual(floor(utc(2011, 02, 13, 08)), utc(2011, 02, 13));
assert.deepEqual(floor(utc(2011, 02, 13, 09)), utc(2011, 02, 13));
assert.deepEqual(floor(utc(2011, 02, 13, 10)), utc(2011, 02, 13));
},
"does not observe the end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 05)), utc(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 06)), utc(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 07)), utc(2011, 10, 06));
assert.deepEqual(floor(utc(2011, 10, 06, 08)), utc(2011, 10, 06));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns midnights": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 30, 23)), local(2010, 11, 31));
assert.deepEqual(ceil(local(2010, 11, 31, 00)), local(2010, 11, 31));
assert.deepEqual(ceil(local(2010, 11, 31, 01)), local(2011, 00, 01));
},
"observes start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 07)), local(2011, 02, 13));
assert.deepEqual(ceil(utc(2011, 02, 13, 08)), local(2011, 02, 13));
assert.deepEqual(ceil(utc(2011, 02, 13, 09)), local(2011, 02, 14));
assert.deepEqual(ceil(utc(2011, 02, 13, 10)), local(2011, 02, 14));
},
"observes end of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 07)), local(2011, 10, 06));
assert.deepEqual(ceil(utc(2011, 10, 06, 08)), local(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 09)), local(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 10)), local(2011, 10, 07));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns midnights": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 30, 23)), utc(2010, 11, 31));
assert.deepEqual(ceil(utc(2010, 11, 31, 00)), utc(2010, 11, 31));
assert.deepEqual(ceil(utc(2010, 11, 31, 01)), utc(2011, 00, 01));
},
"does not observe the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 07)), utc(2011, 02, 14));
assert.deepEqual(ceil(utc(2011, 02, 13, 08)), utc(2011, 02, 14));
assert.deepEqual(ceil(utc(2011, 02, 13, 09)), utc(2011, 02, 14));
assert.deepEqual(ceil(utc(2011, 02, 13, 10)), utc(2011, 02, 14));
},
"does not observe the end of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 05)), utc(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 06)), utc(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 07)), utc(2011, 10, 07));
assert.deepEqual(ceil(utc(2011, 10, 06, 08)), utc(2011, 10, 07));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
suite.export(module);

Просмотреть файл

@ -10,76 +10,150 @@ suite.addBatch({
topic: function() {
return d3.time.hour;
},
"returns hours": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59)), local(2010, 11, 31, 23));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0)), local(2011, 0, 1, 0));
assert.deepEqual(floor(local(2011, 0, 1, 0, 1)), local(2011, 0, 1, 0));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"observes start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 8, 59)), utc(2011, 2, 13, 8));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 0)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 1)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 59)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 10, 0)), utc(2011, 2, 13, 10));
assert.deepEqual(floor(utc(2011, 2, 13, 10, 1)), utc(2011, 2, 13, 10));
},
"observes end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 7, 59)), utc(2011, 10, 6, 7));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 0)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 1)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 59)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 9, 0)), utc(2011, 10, 6, 9));
assert.deepEqual(floor(utc(2011, 10, 6, 9, 1)), utc(2011, 10, 6, 9));
},
"NPT": {
"observes 15-minute offset": tz("Asia/Kathmandu", function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 15));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), utc(2010, 11, 31, 18, 15));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), utc(2010, 11, 31, 18, 15));
})
},
"IST": {
"observes 30-minute offset": tz("Asia/Calcutta", function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 30));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), utc(2010, 11, 31, 18, 30));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), utc(2010, 11, 31, 18, 30));
})
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns hours": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59)), utc(2010, 11, 31, 23));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0)), utc(2011, 0, 1, 0));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 1)), utc(2011, 0, 1, 0));
assert.deepEqual(floor(local(2010, 11, 31, 23, 59)), local(2010, 11, 31, 23));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00)), local(2011, 00, 01, 00));
assert.deepEqual(floor(local(2011, 00, 01, 00, 01)), local(2011, 00, 01, 00));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 8, 59)), utc(2011, 2, 13, 8));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 0)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 1)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 9, 59)), utc(2011, 2, 13, 9));
assert.deepEqual(floor(utc(2011, 2, 13, 10, 0)), utc(2011, 2, 13, 10));
assert.deepEqual(floor(utc(2011, 2, 13, 10, 1)), utc(2011, 2, 13, 10));
"observes start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 08));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
assert.deepEqual(floor(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 10));
},
"does not observe the end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 7, 59)), utc(2011, 10, 6, 7));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 0)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 1)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 8, 59)), utc(2011, 10, 6, 8));
assert.deepEqual(floor(utc(2011, 10, 6, 9, 0)), utc(2011, 10, 6, 9));
assert.deepEqual(floor(utc(2011, 10, 6, 9, 1)), utc(2011, 10, 6, 9));
"observes end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 07));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
assert.deepEqual(floor(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 09));
},
"NPT": {
"observes 15-minute offset": tz("Asia/Kathmandu", function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 15));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 15));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 18, 15));
})
},
"IST": {
"observes 30-minute offset": tz("Asia/Calcutta", function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 17, 30));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 30));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 18, 30));
})
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns hours": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59)), utc(2010, 11, 31, 23));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00)), utc(2011, 00, 01, 00));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 01)), utc(2011, 00, 01, 00));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 08));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 09));
assert.deepEqual(floor(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
assert.deepEqual(floor(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 10));
},
"does not observe the end of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 07));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 08));
assert.deepEqual(floor(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
assert.deepEqual(floor(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 09));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns hours": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59)), local(2011, 00, 01, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00)), local(2011, 00, 01, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 01)), local(2011, 00, 01, 01));
},
"observes start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 09));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 11));
},
"observes end of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 08));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 10));
},
"NPT": {
"observes 15-minute offset": tz("Asia/Kathmandu", function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 18, 15));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 15));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 19, 15));
})
},
"IST": {
"observes 30-minute offset": tz("Asia/Calcutta", function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 18, 30));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 31, 18, 30));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 31, 19, 30));
})
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns hours": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59)), utc(2011, 00, 01, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00)), utc(2011, 00, 01, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 01)), utc(2011, 00, 01, 01));
},
"does not observe the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 08, 59)), utc(2011, 02, 13, 09));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 00)), utc(2011, 02, 13, 09));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 01)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 09, 59)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 10, 00)), utc(2011, 02, 13, 10));
assert.deepEqual(ceil(utc(2011, 02, 13, 10, 01)), utc(2011, 02, 13, 11));
},
"does not observe the end of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 07, 59)), utc(2011, 10, 06, 08));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 00)), utc(2011, 10, 06, 08));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 01)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 08, 59)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 09, 00)), utc(2011, 10, 06, 09));
assert.deepEqual(ceil(utc(2011, 10, 06, 09, 01)), utc(2011, 10, 06, 10));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
function tz(tz, scope) {

Просмотреть файл

@ -10,32 +10,62 @@ suite.addBatch({
topic: function() {
return d3.time.minute;
},
"returns minutes": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 31, 23, 59));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), local(2011, 0, 1, 0, 0));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 59)), local(2011, 0, 1, 0, 0));
assert.deepEqual(floor(local(2011, 0, 1, 0, 1, 0)), local(2011, 0, 1, 0, 1));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns minutes": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 23, 59));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0)), utc(2011, 0, 1, 0, 0));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 59)), utc(2011, 0, 1, 0, 0));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 1, 0)), utc(2011, 0, 1, 0, 1));
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 31, 23, 59));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01, 00, 00));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 59)), local(2011, 00, 01, 00, 00));
assert.deepEqual(floor(local(2011, 00, 01, 00, 01, 00)), local(2011, 00, 01, 00, 01));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns minutes": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 31, 23, 59));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01, 00, 00));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 59)), utc(2011, 00, 01, 00, 00));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 01, 00)), utc(2011, 00, 01, 00, 01));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns minutes": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01, 00, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01, 00, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 59)), local(2011, 00, 01, 00, 01));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 01, 00)), local(2011, 00, 01, 00, 01));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns minutes": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01, 00, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01, 00, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 59)), utc(2011, 00, 01, 00, 01));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 01, 00)), utc(2011, 00, 01, 00, 01));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
suite.export(module);

Просмотреть файл

@ -10,42 +10,82 @@ suite.addBatch({
topic: function() {
return d3.time.month;
},
"returns months": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 1));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), local(2011, 0, 1));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), local(2011, 0, 1));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"observes the start of daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 2, 13, 1)), local(2011, 2, 1));
},
"observes the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 10, 6, 1)), local(2011, 10, 1));
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns months": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 1));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0)), utc(2011, 0, 1));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 1)), utc(2011, 0, 1));
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 01));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 01));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 1)), utc(2011, 2, 1));
"observes the start of daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 02, 13, 01)), local(2011, 02, 01));
},
"does not observe the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 1)), utc(2011, 10, 1));
"observes the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 10, 06, 01)), local(2011, 10, 01));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns months": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 01));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 01));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 01)), utc(2011, 02, 01));
},
"does not observe the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 01)), utc(2011, 10, 01));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns months": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2011, 01, 01));
},
"observes the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(local(2011, 02, 13, 01)), local(2011, 03, 01));
},
"observes the end of the daylight savings time": function(ceil) {
assert.deepEqual(ceil(local(2011, 10, 06, 01)), local(2011, 11, 01));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns months": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 01, 01));
},
"does not observe the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 01)), utc(2011, 03, 01));
},
"does not observe the end of the daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 01)), utc(2011, 11, 01));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
suite.export(module);

Просмотреть файл

@ -10,30 +10,58 @@ suite.addBatch({
topic: function() {
return d3.time.second;
},
"returns seconds": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59, 999)), local(2010, 11, 31, 23, 59, 59));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0, 0)), local(2011, 0, 1, 0, 0, 0));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0, 1)), local(2011, 0, 1, 0, 0, 0));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns seconds": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2010, 11, 31, 23, 59, 59));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0, 0)), utc(2011, 0, 1, 0, 0, 0));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0, 1)), utc(2011, 0, 1, 0, 0, 0));
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59, 999)), local(2010, 11, 31, 23, 59, 59));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00, 000)), local(2011, 00, 01, 00, 00, 00));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00, 001)), local(2011, 00, 01, 00, 00, 00));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns seconds": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2010, 11, 31, 23, 59, 59));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00, 000)), utc(2011, 00, 01, 00, 00, 00));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00, 001)), utc(2011, 00, 01, 00, 00, 00));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns seconds": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59, 999)), local(2011, 00, 01, 00, 00, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00, 000)), local(2011, 00, 01, 00, 00, 00));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00, 001)), local(2011, 00, 01, 00, 00, 01));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns seconds": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59, 999)), utc(2011, 00, 01, 00, 00, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00, 000)), utc(2011, 00, 01, 00, 00, 00));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00, 001)), utc(2011, 00, 01, 00, 00, 01));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds, milliseconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0, milliseconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00, milliseconds || 00);
}
function utc(year, month, day, hours, minutes, seconds, milliseconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0, milliseconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00, milliseconds || 00));
}
suite.export(module);

Просмотреть файл

@ -10,48 +10,94 @@ suite.addBatch({
topic: function() {
return d3.time.week;
},
"returns weeks": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 0, 1, 23, 59, 59)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 0, 2, 0, 0, 0)), local(2011, 0, 2));
assert.deepEqual(floor(local(2011, 0, 2, 0, 0, 1)), local(2011, 0, 2));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"observes the start of daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 2, 13, 1)), local(2011, 2, 13));
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns sundays": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 00, 01, 23, 59, 59)), local(2010, 11, 26));
assert.deepEqual(floor(local(2011, 00, 02, 00, 00, 00)), local(2011, 00, 02));
assert.deepEqual(floor(local(2011, 00, 02, 00, 00, 01)), local(2011, 00, 02));
},
"observes the start of daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 02, 13, 01)), local(2011, 02, 13));
},
"observes the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 10, 06, 01)), local(2011, 10, 06));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns sundays": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 00, 01, 23, 59, 59)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 00, 02, 00, 00, 00)), utc(2011, 00, 02));
assert.deepEqual(floor(utc(2011, 00, 02, 00, 00, 01)), utc(2011, 00, 02));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 02, 13, 01)), utc(2011, 02, 13));
},
"does not observe the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 06, 01)), utc(2011, 10, 06));
}
}
},
"observes the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(local(2011, 10, 6, 1)), local(2011, 10, 6));
},
"UTC": {
topic: function(floor) {
return floor.utc;
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns weeks": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 1)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 0, 1, 23, 59, 59)), utc(2010, 11, 26));
assert.deepEqual(floor(utc(2011, 0, 2, 0, 0, 0)), utc(2011, 0, 2));
assert.deepEqual(floor(utc(2011, 0, 2, 0, 0, 1)), utc(2011, 0, 2));
"returns sundays": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 02));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 02));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 02));
assert.deepEqual(ceil(local(2011, 00, 01, 23, 59, 59)), local(2011, 00, 02));
assert.deepEqual(ceil(local(2011, 00, 02, 00, 00, 00)), local(2011, 00, 02));
assert.deepEqual(ceil(local(2011, 00, 02, 00, 00, 01)), local(2011, 00, 09));
},
"does not observe the start of daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 2, 13, 1)), utc(2011, 2, 13));
"observes the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(local(2011, 02, 13, 01)), local(2011, 02, 20));
},
"does not observe the end of the daylight savings time": function(floor) {
assert.deepEqual(floor(utc(2011, 10, 6, 1)), utc(2011, 10, 6));
"observes the end of the daylight savings time": function(ceil) {
assert.deepEqual(ceil(local(2011, 10, 06, 01)), local(2011, 10, 13));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns sundays": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 02));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 02));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 02));
assert.deepEqual(ceil(utc(2011, 00, 01, 23, 59, 59)), utc(2011, 00, 02));
assert.deepEqual(ceil(utc(2011, 00, 02, 00, 00, 00)), utc(2011, 00, 02));
assert.deepEqual(ceil(utc(2011, 00, 02, 00, 00, 01)), utc(2011, 00, 09));
},
"does not observe the start of daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 02, 13, 01)), utc(2011, 02, 20));
},
"does not observe the end of the daylight savings time": function(ceil) {
assert.deepEqual(ceil(utc(2011, 10, 06, 01)), utc(2011, 10, 13));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
suite.export(module);

Просмотреть файл

@ -10,30 +10,58 @@ suite.addBatch({
topic: function() {
return d3.time.year;
},
"returns years": function(floor) {
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 0, 1));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 0)), local(2011, 0, 1));
assert.deepEqual(floor(local(2011, 0, 1, 0, 0, 1)), local(2011, 0, 1));
"defaults to floor": function(interval) {
assert.strictEqual(interval, interval.floor);
},
"UTC": {
topic: function(floor) {
return floor.utc;
"floor": {
topic: function(interval) {
return interval.floor;
},
"returns years": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 0, 1));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 0)), utc(2011, 0, 1));
assert.deepEqual(floor(utc(2011, 0, 1, 0, 0, 1)), utc(2011, 0, 1));
assert.deepEqual(floor(local(2010, 11, 31, 23, 59, 59)), local(2010, 00, 01));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
assert.deepEqual(floor(local(2011, 00, 01, 00, 00, 01)), local(2011, 00, 01));
},
"UTC": {
topic: function(floor) {
return floor.utc;
},
"returns years": function(floor) {
assert.deepEqual(floor(utc(2010, 11, 31, 23, 59, 59)), utc(2010, 00, 01));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
assert.deepEqual(floor(utc(2011, 00, 01, 00, 00, 01)), utc(2011, 00, 01));
}
}
},
"ceil": {
topic: function(interval) {
return interval.ceil;
},
"returns years": function(ceil) {
assert.deepEqual(ceil(local(2010, 11, 31, 23, 59, 59)), local(2011, 00, 01));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 00)), local(2011, 00, 01));
assert.deepEqual(ceil(local(2011, 00, 01, 00, 00, 01)), local(2012, 00, 01));
},
"UTC": {
topic: function(ceil) {
return ceil.utc;
},
"returns years": function(ceil) {
assert.deepEqual(ceil(utc(2010, 11, 31, 23, 59, 59)), utc(2011, 00, 01));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 00)), utc(2011, 00, 01));
assert.deepEqual(ceil(utc(2011, 00, 01, 00, 00, 01)), utc(2012, 00, 01));
}
}
}
}
});
function local(year, month, day, hours, minutes, seconds) {
return new Date(year, month, day, hours || 0, minutes || 0, seconds || 0);
return new Date(year, month, day, hours || 00, minutes || 00, seconds || 00);
}
function utc(year, month, day, hours, minutes, seconds) {
return new Date(Date.UTC(year, month, day, hours || 0, minutes || 0, seconds || 0));
return new Date(Date.UTC(year, month, day, hours || 00, minutes || 00, seconds || 00));
}
suite.export(module);