UNPKG

2.19 kBPlain TextView Raw
1import { isDate, isString, last } from '@antv/util';
2import fecha from 'fecha';
3import * as fecha1 from 'fecha';
4
5import bisector from './bisector';
6const FORMAT_METHOD = 'format';
7
8export function timeFormat(time, mask) { // 由于 fecha 包的 typescript 定义有问题,所以暂时兼容一下
9 const method = fecha1[FORMAT_METHOD] || fecha[FORMAT_METHOD];
10 return method(time, mask);
11}
12/**
13 * 转换成时间戳
14 * @param value 时间值
15 */
16export function toTimeStamp(value: any): number {
17 if (isString(value)) {
18 if (value.indexOf('T') > 0) {
19 value = new Date(value).getTime();
20 } else {
21 // new Date('2010/01/10') 和 new Date('2010-01-10') 的差别在于:
22 // 如果仅有年月日时,前者是带有时区的: Fri Jan 10 2020 02:40:13 GMT+0800 (中国标准时间)
23 // 后者会格式化成 Sun Jan 10 2010 08:00:00 GMT+0800 (中国标准时间)
24 value = new Date(value.replace(/-/gi, '/')).getTime();
25 }
26 }
27 if (isDate(value)) {
28 value = value.getTime();
29 }
30 return value;
31}
32
33const SECOND = 1000;
34const MINUTE = 60 * SECOND;
35const HOUR = 60 * MINUTE;
36const DAY = 24 * HOUR;
37const MONTH = DAY * 31;
38const YEAR = DAY * 365;
39
40export { SECOND, MINUTE, HOUR, DAY, MONTH, YEAR };
41type Interval = [string, number]; // [defaultMomentFormat, interval]
42const intervals: Interval[] = [
43 ['HH:mm:ss', SECOND],
44 ['HH:mm:ss', SECOND * 10],
45 ['HH:mm:ss', SECOND * 30],
46 ['HH:mm', MINUTE],
47 ['HH:mm', MINUTE * 10],
48 ['HH:mm', MINUTE * 30],
49 ['HH', HOUR],
50 ['HH', HOUR * 6],
51 ['HH', HOUR * 12],
52 ['YYYY-MM-DD', DAY],
53 ['YYYY-MM-DD', DAY * 4],
54 ['YYYY-WW', DAY * 7],
55 ['YYYY-MM', MONTH],
56 ['YYYY-MM', MONTH * 4],
57 ['YYYY-MM', MONTH * 6],
58 ['YYYY', DAY * 380], // 借鉴echarts,保证每个周期累加时不会碰到恰巧不够的问题
59];
60
61export function getTickInterval(min: number, max: number, tickCount: number): Interval {
62 const target = (max - min) / tickCount;
63 const idx = bisector((o: Interval) => o[1])(intervals, target) - 1;
64 let interval: Interval = intervals[idx];
65 if (idx < 0) {
66 interval = intervals[0];
67 } else if (idx >= intervals.length) {
68 interval = last(intervals);
69 }
70 return interval;
71}