You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
386 lines
11 KiB
386 lines
11 KiB
// https://d3js.org/d3-time/ Version 1.0.8. Copyright 2017 Mike Bostock.
|
|
(function (global, factory) {
|
|
typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) :
|
|
typeof define === 'function' && define.amd ? define(['exports'], factory) :
|
|
(factory((global.d3 = global.d3 || {})));
|
|
}(this, (function (exports) { 'use strict';
|
|
|
|
var t0 = new Date;
|
|
var t1 = new Date;
|
|
|
|
function newInterval(floori, offseti, count, field) {
|
|
|
|
function interval(date) {
|
|
return floori(date = new Date(+date)), date;
|
|
}
|
|
|
|
interval.floor = interval;
|
|
|
|
interval.ceil = function(date) {
|
|
return floori(date = new Date(date - 1)), offseti(date, 1), floori(date), date;
|
|
};
|
|
|
|
interval.round = function(date) {
|
|
var d0 = interval(date),
|
|
d1 = interval.ceil(date);
|
|
return date - d0 < d1 - date ? d0 : d1;
|
|
};
|
|
|
|
interval.offset = function(date, step) {
|
|
return offseti(date = new Date(+date), step == null ? 1 : Math.floor(step)), date;
|
|
};
|
|
|
|
interval.range = function(start, stop, step) {
|
|
var range = [], previous;
|
|
start = interval.ceil(start);
|
|
step = step == null ? 1 : Math.floor(step);
|
|
if (!(start < stop) || !(step > 0)) return range; // also handles Invalid Date
|
|
do range.push(previous = new Date(+start)), offseti(start, step), floori(start);
|
|
while (previous < start && start < stop);
|
|
return range;
|
|
};
|
|
|
|
interval.filter = function(test) {
|
|
return newInterval(function(date) {
|
|
if (date >= date) while (floori(date), !test(date)) date.setTime(date - 1);
|
|
}, function(date, step) {
|
|
if (date >= date) {
|
|
if (step < 0) while (++step <= 0) {
|
|
while (offseti(date, -1), !test(date)) {} // eslint-disable-line no-empty
|
|
} else while (--step >= 0) {
|
|
while (offseti(date, +1), !test(date)) {} // eslint-disable-line no-empty
|
|
}
|
|
}
|
|
});
|
|
};
|
|
|
|
if (count) {
|
|
interval.count = function(start, end) {
|
|
t0.setTime(+start), t1.setTime(+end);
|
|
floori(t0), floori(t1);
|
|
return Math.floor(count(t0, t1));
|
|
};
|
|
|
|
interval.every = function(step) {
|
|
step = Math.floor(step);
|
|
return !isFinite(step) || !(step > 0) ? null
|
|
: !(step > 1) ? interval
|
|
: interval.filter(field
|
|
? function(d) { return field(d) % step === 0; }
|
|
: function(d) { return interval.count(0, d) % step === 0; });
|
|
};
|
|
}
|
|
|
|
return interval;
|
|
}
|
|
|
|
var millisecond = newInterval(function() {
|
|
// noop
|
|
}, function(date, step) {
|
|
date.setTime(+date + step);
|
|
}, function(start, end) {
|
|
return end - start;
|
|
});
|
|
|
|
// An optimized implementation for this simple case.
|
|
millisecond.every = function(k) {
|
|
k = Math.floor(k);
|
|
if (!isFinite(k) || !(k > 0)) return null;
|
|
if (!(k > 1)) return millisecond;
|
|
return newInterval(function(date) {
|
|
date.setTime(Math.floor(date / k) * k);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * k);
|
|
}, function(start, end) {
|
|
return (end - start) / k;
|
|
});
|
|
};
|
|
|
|
var milliseconds = millisecond.range;
|
|
|
|
var durationSecond = 1e3;
|
|
var durationMinute = 6e4;
|
|
var durationHour = 36e5;
|
|
var durationDay = 864e5;
|
|
var durationWeek = 6048e5;
|
|
|
|
var second = newInterval(function(date) {
|
|
date.setTime(Math.floor(date / durationSecond) * durationSecond);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * durationSecond);
|
|
}, function(start, end) {
|
|
return (end - start) / durationSecond;
|
|
}, function(date) {
|
|
return date.getUTCSeconds();
|
|
});
|
|
|
|
var seconds = second.range;
|
|
|
|
var minute = newInterval(function(date) {
|
|
date.setTime(Math.floor(date / durationMinute) * durationMinute);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * durationMinute);
|
|
}, function(start, end) {
|
|
return (end - start) / durationMinute;
|
|
}, function(date) {
|
|
return date.getMinutes();
|
|
});
|
|
|
|
var minutes = minute.range;
|
|
|
|
var hour = newInterval(function(date) {
|
|
var offset = date.getTimezoneOffset() * durationMinute % durationHour;
|
|
if (offset < 0) offset += durationHour;
|
|
date.setTime(Math.floor((+date - offset) / durationHour) * durationHour + offset);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * durationHour);
|
|
}, function(start, end) {
|
|
return (end - start) / durationHour;
|
|
}, function(date) {
|
|
return date.getHours();
|
|
});
|
|
|
|
var hours = hour.range;
|
|
|
|
var day = newInterval(function(date) {
|
|
date.setHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setDate(date.getDate() + step);
|
|
}, function(start, end) {
|
|
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationDay;
|
|
}, function(date) {
|
|
return date.getDate() - 1;
|
|
});
|
|
|
|
var days = day.range;
|
|
|
|
function weekday(i) {
|
|
return newInterval(function(date) {
|
|
date.setDate(date.getDate() - (date.getDay() + 7 - i) % 7);
|
|
date.setHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setDate(date.getDate() + step * 7);
|
|
}, function(start, end) {
|
|
return (end - start - (end.getTimezoneOffset() - start.getTimezoneOffset()) * durationMinute) / durationWeek;
|
|
});
|
|
}
|
|
|
|
var sunday = weekday(0);
|
|
var monday = weekday(1);
|
|
var tuesday = weekday(2);
|
|
var wednesday = weekday(3);
|
|
var thursday = weekday(4);
|
|
var friday = weekday(5);
|
|
var saturday = weekday(6);
|
|
|
|
var sundays = sunday.range;
|
|
var mondays = monday.range;
|
|
var tuesdays = tuesday.range;
|
|
var wednesdays = wednesday.range;
|
|
var thursdays = thursday.range;
|
|
var fridays = friday.range;
|
|
var saturdays = saturday.range;
|
|
|
|
var month = newInterval(function(date) {
|
|
date.setDate(1);
|
|
date.setHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setMonth(date.getMonth() + step);
|
|
}, function(start, end) {
|
|
return end.getMonth() - start.getMonth() + (end.getFullYear() - start.getFullYear()) * 12;
|
|
}, function(date) {
|
|
return date.getMonth();
|
|
});
|
|
|
|
var months = month.range;
|
|
|
|
var year = newInterval(function(date) {
|
|
date.setMonth(0, 1);
|
|
date.setHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setFullYear(date.getFullYear() + step);
|
|
}, function(start, end) {
|
|
return end.getFullYear() - start.getFullYear();
|
|
}, function(date) {
|
|
return date.getFullYear();
|
|
});
|
|
|
|
// An optimized implementation for this simple case.
|
|
year.every = function(k) {
|
|
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
|
|
date.setFullYear(Math.floor(date.getFullYear() / k) * k);
|
|
date.setMonth(0, 1);
|
|
date.setHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setFullYear(date.getFullYear() + step * k);
|
|
});
|
|
};
|
|
|
|
var years = year.range;
|
|
|
|
var utcMinute = newInterval(function(date) {
|
|
date.setUTCSeconds(0, 0);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * durationMinute);
|
|
}, function(start, end) {
|
|
return (end - start) / durationMinute;
|
|
}, function(date) {
|
|
return date.getUTCMinutes();
|
|
});
|
|
|
|
var utcMinutes = utcMinute.range;
|
|
|
|
var utcHour = newInterval(function(date) {
|
|
date.setUTCMinutes(0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setTime(+date + step * durationHour);
|
|
}, function(start, end) {
|
|
return (end - start) / durationHour;
|
|
}, function(date) {
|
|
return date.getUTCHours();
|
|
});
|
|
|
|
var utcHours = utcHour.range;
|
|
|
|
var utcDay = newInterval(function(date) {
|
|
date.setUTCHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setUTCDate(date.getUTCDate() + step);
|
|
}, function(start, end) {
|
|
return (end - start) / durationDay;
|
|
}, function(date) {
|
|
return date.getUTCDate() - 1;
|
|
});
|
|
|
|
var utcDays = utcDay.range;
|
|
|
|
function utcWeekday(i) {
|
|
return newInterval(function(date) {
|
|
date.setUTCDate(date.getUTCDate() - (date.getUTCDay() + 7 - i) % 7);
|
|
date.setUTCHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setUTCDate(date.getUTCDate() + step * 7);
|
|
}, function(start, end) {
|
|
return (end - start) / durationWeek;
|
|
});
|
|
}
|
|
|
|
var utcSunday = utcWeekday(0);
|
|
var utcMonday = utcWeekday(1);
|
|
var utcTuesday = utcWeekday(2);
|
|
var utcWednesday = utcWeekday(3);
|
|
var utcThursday = utcWeekday(4);
|
|
var utcFriday = utcWeekday(5);
|
|
var utcSaturday = utcWeekday(6);
|
|
|
|
var utcSundays = utcSunday.range;
|
|
var utcMondays = utcMonday.range;
|
|
var utcTuesdays = utcTuesday.range;
|
|
var utcWednesdays = utcWednesday.range;
|
|
var utcThursdays = utcThursday.range;
|
|
var utcFridays = utcFriday.range;
|
|
var utcSaturdays = utcSaturday.range;
|
|
|
|
var utcMonth = newInterval(function(date) {
|
|
date.setUTCDate(1);
|
|
date.setUTCHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setUTCMonth(date.getUTCMonth() + step);
|
|
}, function(start, end) {
|
|
return end.getUTCMonth() - start.getUTCMonth() + (end.getUTCFullYear() - start.getUTCFullYear()) * 12;
|
|
}, function(date) {
|
|
return date.getUTCMonth();
|
|
});
|
|
|
|
var utcMonths = utcMonth.range;
|
|
|
|
var utcYear = newInterval(function(date) {
|
|
date.setUTCMonth(0, 1);
|
|
date.setUTCHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setUTCFullYear(date.getUTCFullYear() + step);
|
|
}, function(start, end) {
|
|
return end.getUTCFullYear() - start.getUTCFullYear();
|
|
}, function(date) {
|
|
return date.getUTCFullYear();
|
|
});
|
|
|
|
// An optimized implementation for this simple case.
|
|
utcYear.every = function(k) {
|
|
return !isFinite(k = Math.floor(k)) || !(k > 0) ? null : newInterval(function(date) {
|
|
date.setUTCFullYear(Math.floor(date.getUTCFullYear() / k) * k);
|
|
date.setUTCMonth(0, 1);
|
|
date.setUTCHours(0, 0, 0, 0);
|
|
}, function(date, step) {
|
|
date.setUTCFullYear(date.getUTCFullYear() + step * k);
|
|
});
|
|
};
|
|
|
|
var utcYears = utcYear.range;
|
|
|
|
exports.timeInterval = newInterval;
|
|
exports.timeMillisecond = millisecond;
|
|
exports.timeMilliseconds = milliseconds;
|
|
exports.utcMillisecond = millisecond;
|
|
exports.utcMilliseconds = milliseconds;
|
|
exports.timeSecond = second;
|
|
exports.timeSeconds = seconds;
|
|
exports.utcSecond = second;
|
|
exports.utcSeconds = seconds;
|
|
exports.timeMinute = minute;
|
|
exports.timeMinutes = minutes;
|
|
exports.timeHour = hour;
|
|
exports.timeHours = hours;
|
|
exports.timeDay = day;
|
|
exports.timeDays = days;
|
|
exports.timeWeek = sunday;
|
|
exports.timeWeeks = sundays;
|
|
exports.timeSunday = sunday;
|
|
exports.timeSundays = sundays;
|
|
exports.timeMonday = monday;
|
|
exports.timeMondays = mondays;
|
|
exports.timeTuesday = tuesday;
|
|
exports.timeTuesdays = tuesdays;
|
|
exports.timeWednesday = wednesday;
|
|
exports.timeWednesdays = wednesdays;
|
|
exports.timeThursday = thursday;
|
|
exports.timeThursdays = thursdays;
|
|
exports.timeFriday = friday;
|
|
exports.timeFridays = fridays;
|
|
exports.timeSaturday = saturday;
|
|
exports.timeSaturdays = saturdays;
|
|
exports.timeMonth = month;
|
|
exports.timeMonths = months;
|
|
exports.timeYear = year;
|
|
exports.timeYears = years;
|
|
exports.utcMinute = utcMinute;
|
|
exports.utcMinutes = utcMinutes;
|
|
exports.utcHour = utcHour;
|
|
exports.utcHours = utcHours;
|
|
exports.utcDay = utcDay;
|
|
exports.utcDays = utcDays;
|
|
exports.utcWeek = utcSunday;
|
|
exports.utcWeeks = utcSundays;
|
|
exports.utcSunday = utcSunday;
|
|
exports.utcSundays = utcSundays;
|
|
exports.utcMonday = utcMonday;
|
|
exports.utcMondays = utcMondays;
|
|
exports.utcTuesday = utcTuesday;
|
|
exports.utcTuesdays = utcTuesdays;
|
|
exports.utcWednesday = utcWednesday;
|
|
exports.utcWednesdays = utcWednesdays;
|
|
exports.utcThursday = utcThursday;
|
|
exports.utcThursdays = utcThursdays;
|
|
exports.utcFriday = utcFriday;
|
|
exports.utcFridays = utcFridays;
|
|
exports.utcSaturday = utcSaturday;
|
|
exports.utcSaturdays = utcSaturdays;
|
|
exports.utcMonth = utcMonth;
|
|
exports.utcMonths = utcMonths;
|
|
exports.utcYear = utcYear;
|
|
exports.utcYears = utcYears;
|
|
|
|
Object.defineProperty(exports, '__esModule', { value: true });
|
|
|
|
})));
|