MIF_E31211879/desain/assets/node_modules/echarts/util/date.js

162 lines
5.6 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* echarts日期运算格式化相关
*
* @desc echarts基于Canvas纯Javascript图表库提供直观生动可交互可个性化定制的数据统计图表。
* @author Kener (@Kener-林峰, kener.linfeng@gmail.com)
*
*/
define(function() {
var _timeGap = [
{formatter: 'hh : mm : ss', value: 1000}, // 1s
{formatter: 'hh : mm : ss', value: 1000 * 5}, // 5s
{formatter: 'hh : mm : ss', value: 1000 * 10}, // 10s
{formatter: 'hh : mm : ss', value: 1000 * 15}, // 15s
{formatter: 'hh : mm : ss', value: 1000 * 30}, // 30s
{formatter: 'hh : mm\nMM - dd', value: 60000}, // 1m
{formatter: 'hh : mm\nMM - dd', value: 60000 * 5}, // 5m
{formatter: 'hh : mm\nMM - dd', value: 60000 * 10}, // 10m
{formatter: 'hh : mm\nMM - dd', value: 60000 * 15}, // 15m
{formatter: 'hh : mm\nMM - dd', value: 60000 * 30}, // 30m
{formatter: 'hh : mm\nMM - dd', value: 3600000}, // 1h
{formatter: 'hh : mm\nMM - dd', value: 3600000 * 2}, // 2h
{formatter: 'hh : mm\nMM - dd', value: 3600000 * 6}, // 6h
{formatter: 'hh : mm\nMM - dd', value: 3600000 * 12}, // 12h
{formatter: 'MM - dd\nyyyy', value: 3600000 * 24}, // 1d
{formatter: 'week', value: 3600000 * 24 * 7}, // 7d
{formatter: 'month', value: 3600000 * 24 * 31}, // 1M
{formatter: 'quarter', value: 3600000 * 24 * 380 / 4}, // 3M
{formatter: 'half-year', value: 3600000 * 24 * 380 / 2},// 6M
{formatter: 'year', value: 3600000 * 24 * 380} // 1Y
];
/**
* 获取最佳formatter
* @params {number} min 最小值
* @params {number} max 最大值
* @params {=number} splitNumber 分隔段数
*/
function getAutoFormatter(min, max, splitNumber) {
splitNumber = splitNumber > 1 ? splitNumber : 2;
// 最优解
var curValue;
var totalGap;
// 目标
var formatter;
var gapValue;
for (var i = 0, l = _timeGap.length; i < l; i++) {
curValue = _timeGap[i].value;
totalGap = Math.ceil(max / curValue) * curValue
- Math.floor(min / curValue) * curValue;
if (Math.round(totalGap / curValue) <= splitNumber * 1.2) {
formatter = _timeGap[i].formatter;
gapValue = _timeGap[i].value;
// console.log(formatter, gapValue,i);
break;
}
}
if (formatter == null) {
formatter = 'year';
curValue = 3600000 * 24 * 367;
totalGap = Math.ceil(max / curValue) * curValue
- Math.floor(min / curValue) * curValue;
gapValue = Math.round(totalGap / (splitNumber - 1) / curValue) * curValue;
}
return {
formatter: formatter,
gapValue: gapValue
};
}
/**
* 一位数字补0
*/
function s2d (v) {
return v < 10 ? ('0' + v) : v;
}
/**
* 百分比计算
*/
function format(formatter, value) {
if (formatter == 'week'
|| formatter == 'month'
|| formatter == 'quarter'
|| formatter == 'half-year'
|| formatter == 'year'
) {
formatter = 'MM - dd\nyyyy';
}
var date = getNewDate(value);
var y = date.getFullYear();
var M = date.getMonth() + 1;
var d = date.getDate();
var h = date.getHours();
var m = date.getMinutes();
var s = date.getSeconds();
formatter = formatter.replace('MM', s2d(M));
formatter = formatter.toLowerCase();
formatter = formatter.replace('yyyy', y);
formatter = formatter.replace('yy', y % 100);
formatter = formatter.replace('dd', s2d(d));
formatter = formatter.replace('d', d);
formatter = formatter.replace('hh', s2d(h));
formatter = formatter.replace('h', h);
formatter = formatter.replace('mm', s2d(m));
formatter = formatter.replace('m', m);
formatter = formatter.replace('ss', s2d(s));
formatter = formatter.replace('s', s);
return formatter;
}
function nextMonday(value) {
value = getNewDate(value);
value.setDate(value.getDate() + 8 - value.getDay());
return value;
}
function nextNthPerNmonth(value, nth, nmon) {
value = getNewDate(value);
value.setMonth(Math.ceil((value.getMonth() + 1) / nmon) * nmon);
value.setDate(nth);
return value;
}
function nextNthOnMonth(value, nth) {
return nextNthPerNmonth(value, nth, 1);
}
function nextNthOnQuarterYear(value, nth) {
return nextNthPerNmonth(value, nth, 3);
}
function nextNthOnHalfYear(value, nth) {
return nextNthPerNmonth(value, nth, 6);
}
function nextNthOnYear(value, nth) {
return nextNthPerNmonth(value, nth, 12);
}
function getNewDate(value) {
return value instanceof Date
? value
: new Date(typeof value == 'string' ? value.replace(/-/g, '/') : value);
}
return {
getAutoFormatter: getAutoFormatter,
getNewDate: getNewDate,
format: format,
nextMonday: nextMonday,
nextNthPerNmonth: nextNthPerNmonth,
nextNthOnMonth: nextNthOnMonth,
nextNthOnQuarterYear: nextNthOnQuarterYear,
nextNthOnHalfYear: nextNthOnHalfYear,
nextNthOnYear : nextNthOnYear
};
});