UNPKG

@antv/g2plot

Version:

G2 Plot, a market of plots built with the Grammar of Graphics'

121 lines 4.03 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var tslib_1 = require("tslib"); var _ = tslib_1.__importStar(require("@antv/util")); var fecha_1 = tslib_1.__importDefault(require("fecha")); var SECOND = 1000; var MINUTE = 60 * SECOND; var HOUR = 60 * MINUTE; var DAY = 24 * HOUR; var MONTH = 31 * DAY; var YEAR = 365 * DAY; function datetimeStringAbbrevaite(shape, option, index, cfg) { var nodes = cfg.nodes.nodes; var campareText; if (index === nodes.length - 1) { campareText = nodes[index - 1].shape.get('origin').text; } else { campareText = nodes[index + 1].shape.get('origin').text; } var compare = new Date(campareText); /** 获取时间周期和时间间隔 */ var text = shape.get('origin').text; var current = new Date(text); var startText = nodes[0].shape.get('origin').text; var start = new Date(startText); var endText = nodes[nodes.length - 1].shape.get('origin').text; var end = new Date(endText); var timeDuration = getDateTimeMode(start, end); var timeCycle = getDateTimeMode(current, compare); // time frequency // 如果duration和frequency在同一区间 if (timeDuration === timeCycle) { if (index !== 0 && index !== nodes.length - 1) { var formatter = sameSectionFormatter(timeDuration); shape.attr('text', fecha_1.default.format(current, formatter)); } return; } if (index !== 0) { var previousText = nodes[index - 1].shape.get('origin').text; var previous = new Date(previousText); var isAbbreviate = needAbbrevaite(timeDuration, current, previous); if (isAbbreviate) { var formatter = getAbbrevaiteFormatter(timeDuration, timeCycle); shape.attr('text', fecha_1.default.format(current, formatter)); return; } } } exports.default = datetimeStringAbbrevaite; function needAbbrevaite(mode, current, previous) { var currentStamp = getTime(current, mode); var previousStamp = getTime(previous, mode); if (currentStamp !== previousStamp) { return false; } return true; } function getDateTimeMode(a, b) { var mode; var dist = Math.abs(a - b); var mapper = { minute: [MINUTE, HOUR], hour: [HOUR, DAY], day: [DAY, MONTH], month: [MONTH, YEAR], year: [YEAR, Infinity], }; _.each(mapper, function (range, key) { if (dist >= range[0] && dist < range[1]) { mode = key; } }); return mode; } function getAbbrevaiteFormatter(duration, cycle) { var times = ['year', 'month', 'day', 'hour', 'minute']; var formatters = ['YYYY', 'MM', 'DD', 'HH', 'MM']; var startIndex = times.indexOf(duration) + 1; var endIndex = times.indexOf(cycle); var formatter = ''; for (var i = startIndex; i <= endIndex; i++) { formatter += formatters[i]; if (i < endIndex) { formatter += '-'; } } return formatter; } function sameSectionFormatter(mode) { var times = ['year', 'month', 'day', 'hour', 'minute']; var formatters = ['YYYY', 'MM', 'DD', 'HH', 'MM']; var index = times.indexOf(mode); var formatter = formatters[index]; return formatter; } function getTime(date, mode) { if (mode === 'year') { return date.getFullYear(); } if (mode === 'month') { return date.getMonth() + 1; } if (mode === 'day') { return date.getDay() + 1; } if (mode === 'hour') { return date.getHours() + 1; } if (mode === 'minute') { return date.getMinutes() + 1; } } /*tslint:disable*/ function isTime(string) { var hourminExp = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]$/; var hourminSecExp = /^(?:(?:[0-2][0-3])|(?:[0-1][0-9])):[0-5][0-9]:[0-5][0-9]$/; return hourminExp.test(string) || hourminSecExp.test(string); } exports.isTime = isTime; //# sourceMappingURL=datetime-string-abbrevaite.js.map