123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243 |
- var zrUtil = require("zrender/lib/core/util");
- var numberUtil = require("../util/number");
- var formatUtil = require("../util/format");
- var scaleHelper = require("./helper");
- var IntervalScale = require("./Interval");
- var intervalScaleProto = IntervalScale.prototype;
- var mathCeil = Math.ceil;
- var mathFloor = Math.floor;
- var ONE_SECOND = 1000;
- var ONE_MINUTE = ONE_SECOND * 60;
- var ONE_HOUR = ONE_MINUTE * 60;
- var ONE_DAY = ONE_HOUR * 24;
- var bisect = function (a, x, lo, hi) {
- while (lo < hi) {
- var mid = lo + hi >>> 1;
- if (a[mid][1] < x) {
- lo = mid + 1;
- } else {
- hi = mid;
- }
- }
- return lo;
- };
- var TimeScale = IntervalScale.extend({
- type: 'time',
-
- getLabel: function (val) {
- var stepLvl = this._stepLvl;
- var date = new Date(val);
- return formatUtil.formatTime(stepLvl[0], date, this.getSetting('useUTC'));
- },
-
- niceExtent: function (opt) {
- var extent = this._extent;
- if (extent[0] === extent[1]) {
-
- extent[0] -= ONE_DAY;
- extent[1] += ONE_DAY;
- }
- if (extent[1] === -Infinity && extent[0] === Infinity) {
- var d = new Date();
- extent[1] = +new Date(d.getFullYear(), d.getMonth(), d.getDate());
- extent[0] = extent[1] - ONE_DAY;
- }
- this.niceTicks(opt.splitNumber, opt.minInterval, opt.maxInterval);
- var interval = this._interval;
- if (!opt.fixMin) {
- extent[0] = numberUtil.round(mathFloor(extent[0] / interval) * interval);
- }
- if (!opt.fixMax) {
- extent[1] = numberUtil.round(mathCeil(extent[1] / interval) * interval);
- }
- },
-
- niceTicks: function (approxTickNum, minInterval, maxInterval) {
- approxTickNum = approxTickNum || 10;
- var extent = this._extent;
- var span = extent[1] - extent[0];
- var approxInterval = span / approxTickNum;
- if (minInterval != null && approxInterval < minInterval) {
- approxInterval = minInterval;
- }
- if (maxInterval != null && approxInterval > maxInterval) {
- approxInterval = maxInterval;
- }
- var scaleLevelsLen = scaleLevels.length;
- var idx = bisect(scaleLevels, approxInterval, 0, scaleLevelsLen);
- var level = scaleLevels[Math.min(idx, scaleLevelsLen - 1)];
- var interval = level[1];
- if (level[0] === 'year') {
- var yearSpan = span / interval;
-
- var yearStep = numberUtil.nice(yearSpan / approxTickNum, true);
- interval *= yearStep;
- }
- var timezoneOffset = this.getSetting('useUTC') ? 0 : new Date(+extent[0] || +extent[1]).getTimezoneOffset() * 60 * 1000;
- var niceExtent = [Math.round(mathCeil((extent[0] - timezoneOffset) / interval) * interval + timezoneOffset), Math.round(mathFloor((extent[1] - timezoneOffset) / interval) * interval + timezoneOffset)];
- scaleHelper.fixExtent(niceExtent, extent);
- this._stepLvl = level;
- this._interval = interval;
- this._niceExtent = niceExtent;
- },
- parse: function (val) {
-
- return +numberUtil.parseDate(val);
- }
- });
- zrUtil.each(['contain', 'normalize'], function (methodName) {
- TimeScale.prototype[methodName] = function (val) {
- return intervalScaleProto[methodName].call(this, this.parse(val));
- };
- });
- var scaleLevels = [
- ['hh:mm:ss', ONE_SECOND],
- ['hh:mm:ss', ONE_SECOND * 5],
- ['hh:mm:ss', ONE_SECOND * 10],
- ['hh:mm:ss', ONE_SECOND * 15],
- ['hh:mm:ss', ONE_SECOND * 30],
- ['hh:mm\nMM-dd', ONE_MINUTE],
- ['hh:mm\nMM-dd', ONE_MINUTE * 5],
- ['hh:mm\nMM-dd', ONE_MINUTE * 10],
- ['hh:mm\nMM-dd', ONE_MINUTE * 15],
- ['hh:mm\nMM-dd', ONE_MINUTE * 30],
- ['hh:mm\nMM-dd', ONE_HOUR],
- ['hh:mm\nMM-dd', ONE_HOUR * 2],
- ['hh:mm\nMM-dd', ONE_HOUR * 6],
- ['hh:mm\nMM-dd', ONE_HOUR * 12],
- ['MM-dd\nyyyy', ONE_DAY],
- ['MM-dd\nyyyy', ONE_DAY * 2],
- ['MM-dd\nyyyy', ONE_DAY * 3],
- ['MM-dd\nyyyy', ONE_DAY * 4],
- ['MM-dd\nyyyy', ONE_DAY * 5],
- ['MM-dd\nyyyy', ONE_DAY * 6],
- ['week', ONE_DAY * 7],
- ['MM-dd\nyyyy', ONE_DAY * 10],
- ['week', ONE_DAY * 14],
- ['week', ONE_DAY * 21],
- ['month', ONE_DAY * 31],
- ['week', ONE_DAY * 42],
- ['month', ONE_DAY * 62],
- ['week', ONE_DAY * 70],
- ['quarter', ONE_DAY * 95],
- ['month', ONE_DAY * 31 * 4],
- ['month', ONE_DAY * 31 * 5],
- ['half-year', ONE_DAY * 380 / 2],
- ['month', ONE_DAY * 31 * 8],
- ['month', ONE_DAY * 31 * 10],
- ['year', ONE_DAY * 380]
- ];
- TimeScale.create = function (model) {
- return new TimeScale({
- useUTC: model.ecModel.get('useUTC')
- });
- };
- var _default = TimeScale;
- module.exports = _default;
|