/**用法
 * Lunar.toSolar(2016, 6, 3); 农历转化公历
 * Lunar.toLunar(2016, 7, 6); 公历转化农历
 */
var Lunar = {
	MIN_YEAR: 1891,
	MAX_YEAR: 2100,
	lunarInfo: [
		[0, 2, 9, 21936],
		[6, 1, 30, 9656],
		[0, 2, 17, 9584],
		[0, 2, 6, 21168],
		[5, 1, 26, 43344],
		[0, 2, 13, 59728],
		[0, 2, 2, 27296],
		[3, 1, 22, 44368],
		[0, 2, 10, 43856],
		[8, 1, 30, 19304],
		[0, 2, 19, 19168],
		[0, 2, 8, 42352],
		[5, 1, 29, 21096],
		[0, 2, 16, 53856],
		[0, 2, 4, 55632],
		[4, 1, 25, 27304],
		[0, 2, 13, 22176],
		[0, 2, 2, 39632],
		[2, 1, 22, 19176],
		[0, 2, 10, 19168],
		[6, 1, 30, 42200],
		[0, 2, 18, 42192],
		[0, 2, 6, 53840],
		[5, 1, 26, 54568],
		[0, 2, 14, 46400],
		[0, 2, 3, 54944],
		[2, 1, 23, 38608],
		[0, 2, 11, 38320],
		[7, 2, 1, 18872],
		[0, 2, 20, 18800],
		[0, 2, 8, 42160],
		[5, 1, 28, 45656],
		[0, 2, 16, 27216],
		[0, 2, 5, 27968],
		[4, 1, 24, 44456],
		[0, 2, 13, 11104],
		[0, 2, 2, 38256],
		[2, 1, 23, 18808],
		[0, 2, 10, 18800],
		[6, 1, 30, 25776],
		[0, 2, 17, 54432],
		[0, 2, 6, 59984],
		[5, 1, 26, 27976],
		[0, 2, 14, 23248],
		[0, 2, 4, 11104],
		[3, 1, 24, 37744],
		[0, 2, 11, 37600],
		[7, 1, 31, 51560],
		[0, 2, 19, 51536],
		[0, 2, 8, 54432],
		[6, 1, 27, 55888],
		[0, 2, 15, 46416],
		[0, 2, 5, 22176],
		[4, 1, 25, 43736],
		[0, 2, 13, 9680],
		[0, 2, 2, 37584],
		[2, 1, 22, 51544],
		[0, 2, 10, 43344],
		[7, 1, 29, 46248],
		[0, 2, 17, 27808],
		[0, 2, 6, 46416],
		[5, 1, 27, 21928],
		[0, 2, 14, 19872],
		[0, 2, 3, 42416],
		[3, 1, 24, 21176],
		[0, 2, 12, 21168],
		[8, 1, 31, 43344],
		[0, 2, 18, 59728],
		[0, 2, 8, 27296],
		[6, 1, 28, 44368],
		[0, 2, 15, 43856],
		[0, 2, 5, 19296],
		[4, 1, 25, 42352],
		[0, 2, 13, 42352],
		[0, 2, 2, 21088],
		[3, 1, 21, 59696],
		[0, 2, 9, 55632],
		[7, 1, 30, 23208],
		[0, 2, 17, 22176],
		[0, 2, 6, 38608],
		[5, 1, 27, 19176],
		[0, 2, 15, 19152],
		[0, 2, 3, 42192],
		[4, 1, 23, 53864],
		[0, 2, 11, 53840],
		[8, 1, 31, 54568],
		[0, 2, 18, 46400],
		[0, 2, 7, 46752],
		[6, 1, 28, 38608],
		[0, 2, 16, 38320],
		[0, 2, 5, 18864],
		[4, 1, 25, 42168],
		[0, 2, 13, 42160],
		[10, 2, 2, 45656],
		[0, 2, 20, 27216],
		[0, 2, 9, 27968],
		[6, 1, 29, 44448],
		[0, 2, 17, 43872],
		[0, 2, 6, 38256],
		[5, 1, 27, 18808],
		[0, 2, 15, 18800],
		[0, 2, 4, 25776],
		[3, 1, 23, 27216],
		[0, 2, 10, 59984],
		[8, 1, 31, 27432],
		[0, 2, 19, 23232],
		[0, 2, 7, 43872],
		[5, 1, 28, 37736],
		[0, 2, 16, 37600],
		[0, 2, 5, 51552],
		[4, 1, 24, 54440],
		[0, 2, 12, 54432],
		[0, 2, 1, 55888],
		[2, 1, 22, 23208],
		[0, 2, 9, 22176],
		[7, 1, 29, 43736],
		[0, 2, 18, 9680],
		[0, 2, 7, 37584],
		[5, 1, 26, 51544],
		[0, 2, 14, 43344],
		[0, 2, 3, 46240],
		[4, 1, 23, 46416],
		[0, 2, 10, 44368],
		[9, 1, 31, 21928],
		[0, 2, 19, 19360],
		[0, 2, 8, 42416],
		[6, 1, 28, 21176],
		[0, 2, 16, 21168],
		[0, 2, 5, 43312],
		[4, 1, 25, 29864],
		[0, 2, 12, 27296],
		[0, 2, 1, 44368],
		[2, 1, 22, 19880],
		[0, 2, 10, 19296],
		[6, 1, 29, 42352],
		[0, 2, 17, 42208],
		[0, 2, 6, 53856],
		[5, 1, 26, 59696],
		[0, 2, 13, 54576],
		[0, 2, 3, 23200],
		[3, 1, 23, 27472],
		[0, 2, 11, 38608],
		[11, 1, 31, 19176],
		[0, 2, 19, 19152],
		[0, 2, 8, 42192],
		[6, 1, 28, 53848],
		[0, 2, 15, 53840],
		[0, 2, 4, 54560],
		[5, 1, 24, 55968],
		[0, 2, 12, 46496],
		[0, 2, 1, 22224],
		[2, 1, 22, 19160],
		[0, 2, 10, 18864],
		[7, 1, 30, 42168],
		[0, 2, 17, 42160],
		[0, 2, 6, 43600],
		[5, 1, 26, 46376],
		[0, 2, 14, 27936],
		[0, 2, 2, 44448],
		[3, 1, 23, 21936],
		[0, 2, 11, 37744],
		[8, 2, 1, 18808],
		[0, 2, 19, 18800],
		[0, 2, 8, 25776],
		[6, 1, 28, 27216],
		[0, 2, 15, 59984],
		[0, 2, 4, 27424],
		[4, 1, 24, 43872],
		[0, 2, 12, 43744],
		[0, 2, 2, 37600],
		[3, 1, 21, 51568],
		[0, 2, 9, 51552],
		[7, 1, 29, 54440],
		[0, 2, 17, 54432],
		[0, 2, 5, 55888],
		[5, 1, 26, 23208],
		[0, 2, 14, 22176],
		[0, 2, 3, 42704],
		[4, 1, 23, 21224],
		[0, 2, 11, 21200],
		[8, 1, 31, 43352],
		[0, 2, 19, 43344],
		[0, 2, 7, 46240],
		[6, 1, 27, 46416],
		[0, 2, 15, 44368],
		[0, 2, 5, 21920],
		[4, 1, 24, 42448],
		[0, 2, 12, 42416],
		[0, 2, 2, 21168],
		[3, 1, 22, 43320],
		[0, 2, 9, 26928],
		[7, 1, 29, 29336],
		[0, 2, 17, 27296],
		[0, 2, 6, 44368],
		[5, 1, 26, 19880],
		[0, 2, 14, 19296],
		[0, 2, 3, 42352],
		[4, 1, 24, 21104],
		[0, 2, 10, 53856],
		[8, 1, 30, 59696],
		[0, 2, 18, 54560],
		[0, 2, 7, 55968],
		[6, 1, 27, 27472],
		[0, 2, 15, 22224],
		[0, 2, 5, 19168],
		[4, 1, 25, 42216],
		[0, 2, 12, 42192],
		[0, 2, 1, 53584],
		[2, 1, 21, 55592],
		[0, 2, 9, 54560]
	],
	//是否闰年
	isLeapYear: function(year) {
		return((year % 4 == 0 && year % 100 != 0) || (year % 400 == 0));
	},
	//天干地支年
	lunarYear: function(year) {
		var gan = ['庚', '辛', '壬', '癸', '甲', '乙', '丙', '丁', '戊', '己'],
			zhi = ['申', '酉', '戌', '亥', '子', '丑', '寅', '卯', '辰', '巳', '午', '未'],
			str = year.toString().split("");
		return gan[str[3]] + zhi[year % 12];
	},
	//生肖年
	zodiacYear: function(year) {
		var zodiac = ['猴', '鸡', '狗', '猪', '鼠', '牛', '虎', '兔', '龙', '蛇', '马', '羊'];
		return zodiac[year % 12];
	},
	//公历月份天数
	//@param year 阳历-年
	//@param month 阳历-月
	solarMonthDays: function(year, month) {
		var FebDays = this.isLeapYear(year) ? 29 : 28;
		var monthHash = ['', 31, FebDays, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
		return monthHash[month];
	},
	//农历月份天数
	lunarMonthDays: function(year, month) {
		var monthData = this.lunarMonths(year);
		return monthData[month - 1];
	},
	//农历月份天数数组
	lunarMonths: function(year) {
		var yearData = this.lunarInfo[year - this.MIN_YEAR];
		var leapMonth = yearData[0];
		var bit = (+yearData[3]).toString(2);
		var months = [];
		for(var i = 0; i < bit.length; i++) {
			months[i] = bit.substr(i, 1);
		}

		for(var k = 0, len = 16 - months.length; k < len; k++) {
			months.unshift('0');
		}

		months = months.slice(0, (leapMonth == 0 ? 12 : 13));
		for(var i = 0; i < months.length; i++) {
			months[i] = +months[i] + 29;
		}
		return months;
	},
	//农历每年的天数
	//@param year 农历年份
	lunarYearDays: function(year) {
		var monthArray = this.lunarYearMonths(year);
		var len = monthArray.length;
		return(monthArray[len - 1] == 0 ? monthArray[len - 2] : monthArray[len - 1]);
	},
	//
	lunarYearMonths: function(year) {
		var monthData = this.lunarMonths(year);
		var res = [];
		var temp = 0;
		var yearData = this.lunarInfo[year - this.MIN_YEAR];
		var len = (yearData[0] == 0 ? 12 : 13);
		for(var i = 0; i < len; i++) {
			temp = 0;
			for(var j = 0; j <= i; j++) {
				temp += monthData[j];
			}
			res.push(temp);
		}
		return res;
	},
	//获取闰月
	//@param year 农历年份
	leapMonth: function(year) {
		var yearData = this.lunarInfo[year - this.MIN_YEAR];
		return yearData[0];
	},
	//计算农历日期与正月初一相隔的天数
	betweenLunarDays: function(year, month, day) {
		var yearMonth = this.lunarMonths(year);
		var res = 0;
		for(var i = 1; i < month; i++) {
			res += yearMonth[i - 1];
		}
		res += day - 1;
		return res;
	},
	//计算2个阳历日期之间的天数
	//@param year 阳历年
	//@param month
	//@param day
	//@param l_month 阴历正月对应的阳历月份
	//@param l_day  阴历初一对应的阳历天
	betweenSolarDays: function(year, month, day, l_month, l_day) {
		var time1 = new Date(year + "-" + month + "-" + day).getTime(),
			time2 = new Date(year + "-" + l_month + "-" + l_day).getTime();
		return Math.ceil((time1 - time2) / 24 / 3600 / 1000);
	},
	//根据距离正月初一的天数计算阴历日期
	//@param year 阳历年
	//@param between 天数
	lunarByBetween: function(year, between) {
		var lunarArray = [],
			yearMonth = [],
			t = 0,
			e = 0,
			leapMonth = 0,
			m = '';
		if(between == 0) {
			t = 1;
			e = 1;
			m = '正月';
		} else {
			year = between > 0 ? year : (year - 1);
			yearMonth = this.lunarYearMonths(year);
			leapMonth = this.leapMonth(year);
			between = between > 0 ? between : (this.lunarYearDays(year) + between);
			for(var i = 0; i < 13; i++) {
				if(between == yearMonth[i]) {
					t = i + 2;
					e = 1;
					break;
				} else if(between < yearMonth[i]) {
					t = i + 1;
					e = between - ((yearMonth[i - 1]) ? yearMonth[i - 1] : 0) + 1;
					break;
				}
			}

			m = (leapMonth != 0 && t == leapMonth + 1) ?
				('闰'.this.chineseMonth(t - 1)) :
				this.chineseMonth(((leapMonth != 0 && leapMonth + 1 < t) ? (t - 1) : t));
		}
		lunarArray.push(year, t, e); //年 月 日
		lunarArray.push(this.lunarYear(year),
			this.zodiacYear(year),
			m,
			this.chineseNumber(e)); //天干地支年 生肖年 月份 日
		lunarArray.push(leapMonth); //闰几月
		return lunarArray;
	},
	//中文月份
	chineseMonth: function(month) {
		var monthHash = ['', '正月', '二月', '三月', '四月', '五月', '六月', '七月', '八月', '九月', '十月', '冬月', '腊月'];
		return monthHash[month];
	},
	//中文日期
	chineseNumber: function(num) {
		var dateHash = ['', '一', '二', '三', '四', '五', '六', '七', '八', '九', '十'];
		var res = "";
		if(num <= 10) {
			res = '初' + dateHash[num];
		} else if(num > 10 && num < 20) {
			res = '十' + dateHash[num - 10];
		} else if(num == 20) {
			res = "二十";
		} else if(num > 20 && num < 30) {
			res = "廿" + dateHash[num - 20];
		} else if(num == 30) {
			res = "三十";
		}
		return res;
	},
	//转换农历
	toLunar: function(year, month, day) {
		var yearData = this.lunarInfo[year - this.MIN_YEAR];
		if(year == this.MIN_YEAR && month <= 2 && day <= 9) {
			return [1891, 1, 1, '辛卯', '兔', '正月', '初一'];
		}
		return this.lunarByBetween(year, this.betweenSolarDays(year, month, day, yearData[1], yearData[2]));
	},
	//转换公历
	//@param year 阴历-年
	//@param month 阴历-月，闰月处理：例如如果当年闰五月，那么第二个五月就传六月，相当于阴历有13个月
	//@param date 阴历-日
	toSolar: function(year, month, day) {
		var yearData = this.lunarInfo[year - this.MIN_YEAR];
		var between = this.betweenLunarDays(year, month, day);
		var ms = new Date(year + "-" + yearData[1] + "-" + yearData[2]).getTime();
		var s = ms + between * 24 * 60 * 60 * 1000;
		var d = new Date();
		d.setTime(s);
		year = d.getFullYear();
		month = d.getMonth() + 1;
		day = d.getDate();
		return [year, month, day];
	}
};
/**
 * 农历转阴历
 * @param {Object} frommat
 */
Date.prototype.toSolar = function(frommat) {
	var str = Lunar.toSolar(this.getFullYear(), this.getMonth() + 1, this.getDate());
	frommat = frommat ? frommat : 'YYYY-MM-DD';
	str[1] = str[1] >= 10 ? str[1] : "0" + str[1];
	str[2] = str[2] >= 10 ? str[2] : "0" + str[2];
	frommat = frommat.replace('YYYY', str[0]).replace("MM", str[1]).replace("DD", str[2]);
	return frommat;
}
/**
 * 阴历转农历
 * @param {Object} frommat
 */
Date.prototype.toLunar = function(frommat) {
	var str = Lunar.toLunar(this.getFullYear(), this.getMonth() + 1, this.getDate());
	frommat = frommat ? frommat : 'YYYY-MM-DD 戊戌猪年七月初八';
	str[1] = str[1] >= 10 ? str[1] : "0" + str[1];
	str[2] = str[2] >= 10 ? str[2] : "0" + str[2];
	frommat = frommat.replace('YYYY', str[0]).replace("MM", str[1]).replace("DD", str[2]);
	frommat = frommat.replace('戊戌', str[3]).replace("猪", str[4]).replace("七月", str[5]).replace("初八", str[6]);
	return frommat;
}
/**
 * 日期格式化
 * @param {Object} str 默认格式 YYYY-MM-DD hh:mm:ss
 * @param {Object} type 1 不补齐0 2 补齐
 */
Date.prototype.frommat = function(str) {
	str = str ? str : 'YYYY-MM-DD hh:mm:ss';
	var year = this.getFullYear();
	var mon = this.getMonth() + 1;
	var day = this.getDate();
	var housr = this.getHours();
	var min = this.getMinutes();
	var second = this.getSeconds();

	mon = mon >= 10 ? mon : "0" + mon;
	day = day >= 10 ? day : "0" + day;
	housr = housr >= 10 ? housr : "0" + housr;
	min = min >= 10 ? min : "0" + min;
	second = second >= 10 ? second : "0" + second;
	str = str.replace("YYYY", year).replace("MM", mon)
		.replace("DD", day).replace("hh", housr)
		.replace('mm', min).replace('ss', second);
	//console.log(str);
	return str;
}
/**
 * 在Safari和IE8上执行 new Date('2017-12-8 11:36:45'); 会得到Invalid Date
 * 本函数重写默认的Date函数，以解决其在Safari，IE8上的bug
 */
//Date = function(Date) {
//	MyDate.prototype = Date.prototype;
//	return MyDate;
//
//	function MyDate() {
//		// 当只有一个参数并且参数类型是字符串时，把字符串中的-替换为/
//		if(arguments.length === 1) {
//			let arg = arguments[0];
//			if(Object.prototype.toString.call(arg) === '[object String]' && arg.indexOf('T') === -1) {
//				arguments[0] = arg.replace(/-/g, "/");
//				// console.log(arguments[0]);
//			}
//		}
//		let bind = Function.bind;
//		let unbind = bind.bind(bind);
//		return new(unbind(Date, null).apply(null, arguments));
//	}
//}(Date);

/**
 * 日期 该时间前推一定时间
 * @param {Object} timetype  依据什么推算  YYYY:年 MM 月 DD 日 hh:小时,mm:分钟 ss:秒
 * @param {Object} number 更改数量 只能为正数
 */
Date.prototype.diffDate = function(timetype, number) {
	var year = this.getFullYear();
	var mon = this.getMonth();
	var day = this.getDate();
	var housr = this.getHours();
	var min = this.getMinutes();
	var second = this.getSeconds();
	number = parseInt(number);
	if(timetype && !isNaN(number)) {
		if(timetype == 'YYYY') {
			this.setYear(year + number);
		}
		if(timetype == 'MM') {
			this.setMonth(mon + number);
		}
		if(timetype == 'DD') {
			this.setDate(day + number);
		}
		if(timetype == 'hh') {
			this.setHours(housr + number);
		}
		if(timetype == 'mm') {
			this.setMinutes(min + number);
		}
		if(timetype == 'ss') {
			this.setSeconds(second + number);
		}
	}
	return this;

}
/**
 * 获取上N周周一为哪天
 * @param {Object} number
 */
Date.prototype.befferWeek = function(number) {
	var day = this.getDay();
	var d = day <= d ? 0 : day - 1;
	d = day == 0 ? 6 : d; //周日则为上周周一
	number = !number ? 0 : number;
	var befferday = number * 7 + d;
	var befferDate = this.diffDate("DD", -befferday);
	return befferDate;
}
Date.prototype.frommatWeek = function(str) {
	var weekMap = {
		1: "一",
		2: "二",
		3: "三",
		4: "四",
		5: "五",
		6: "六",
		0: "日"
	}
	var date = new Date();
	if(str) {
		var date = new Date(str);
	}
	var week = date.getDay();
	week = "星期" + weekMap[week];
	return week
}
/**
 * 2 个时间相差的多久
 * @param {Object} date 对比的日期
 * @param {Object} frommat 相差结果格式
 */
Date.prototype.getDiffer = function(date, frommat) {
	if(typeof date == "string") {
		date = date.replace(/-/g, "/");
	}
	date = new Date(date);
	var stime = this.getTime();
	var dtime = date.getTime();
	var difftime = (stime - dtime) / 1000;
	frommat = frommat ? frommat : "DD天hh小时mm分钟ss秒";
	if(frommat.indexOf("YYYY") > -1) {
		var year = Math.floor(difftime / 86400 / 365);
		difftime = difftime % (86400 * 365);
	}
	if(frommat.indexOf("MM") > -1) {
		var month = Math.floor(difftime / 86400 / 30);
		difftime = difftime % (86400 * 30);
	}
	if(frommat.indexOf("DD") > -1) {
		var diffd = parseInt(difftime / (60 * 60 * 24));
		difftime = difftime % (60 * 60 * 24);
	}
	if(frommat.indexOf("hh") > -1) {
		var diffh = parseInt(difftime / (60 * 60));
		difftime = difftime / 3600;
	}
	if(frommat.indexOf("mm") > -1) {
		var diffm = parseInt(difftime % 60);
		difftime = difftime / 60;
	}
	var diffs = parseInt(difftime % 60);

	var frommat1 = frommat.replace("YYYY", year).replace("MM", month).replace("DD", diffd).replace("hh", diffh).replace("mm", diffm).replace("ss", diffs);
	if(frommat1 != frommat) {
		return frommat1
	} else {
		console.log("未设置正确的返回格式..")
		return frommat;
	}

}

/**
 * 时间是以X倍数的存在
 * @param {Object} number 倍数系数
 * @param { Object} dtype 类型 小时/分钟 hh/mm/other(以天为单位)
 * @param{Object} type //向上去整cell  向下取整floor
 */
Date.prototype.multiple = function(number, dtype, type) {
	number = Number(number);
	this.setSeconds(0);
	dtype = dtype ? dtype : "mm";
	type = type ? type : "floor";
	var m = this.getMinutes();
	var h = this.getHours();
	var date = this;
	if(dtype == "mm") {
		var mx = m % number;
		if(mx != 0) {
			if(type == "floor") {
				var date = this.diffDate("mm", -mx);
			} else {
				var date = this.diffDate("mm", number - mx);
			}
		}
	} else if(dtype == "hh") {
		var mx = h % number;
		if(mx != 0) {
			if(type == "floor") {
				var date = this.diffDate("hh", -mx);
			} else {
				var date = this.diffDate("hh", number - mx);
			}
		}
	} else {
		var day = this.getDate();
		var mx = day % number;
		if(mx != 0) {
			if(type == "floor") {
				var date = this.diffDate("DD", -mx);
			} else {
				var date = this.diffDate("DD", number - mx);
			}
		}
	}
	return date;
}
Date.prototype.diffTimes = function(date1, num) {
	var time1 = this.getTime();
	//date1= date1.replace(/-/g,"/");
	if(typeof time1 == "string") {
		time1 = time1.replace(/-/g, "/");
	}
	var date = new Date(date1);
	var time2 = date.getTime();
	var t = time1 - time2;
	t = t / 1000;
	var n = t / num;
	return n;
}

/**
 * 在数组中删除其中几个数据
 * @param {Object} list
 */
Array.prototype.removeArray = function(list) {
	var length = list.length;
	if(length == 0 || this.length == 0) {
		return this;
	} else {
		var newArray = this;
		for(var i = 0; i < length; i++) {
			var json = list[i];
			newArray = newArray.removeJson(json);
		}
		return newArray;
	}

}
/**
 * 在数组中删除其中几个数据
 * @param {Object} list
 */
Array.prototype.removeArrayStr = function(list) {
	var length = list.length;
	if(length == 0 || this.length == 0) {
		return this;
	} else {
		var newArray = this;
		for(var i = 0; i < length; i++) {
			var json = list[i];
			newArray = this.removeStr(json);
		}
		return newArray;
	}

}
/**
 * 根据json 数据删除完全匹配的数据
 * @param {Object} json
 */
Array.prototype.removeJson = function(json) {
	var length = this.length;
	if(length == 0) {
		return this;
	} else {
		var newArray = [];
		for(var i = 0; i < length; i++) {
			var status = 0;
			var item = this[i];
			var jsonlength = 0;
			for(var key in item) {
				jsonlength++;
				if(json[key] == item[key]) {
					status++;
				}
			}
			if(status == jsonlength) {} else {
				newArray.push(item)
			}
		}
		return newArray;
	}
}
/**
 * 判断json数据是否在数组中完全匹配
 * @param {Object} json
 */
Array.prototype.isexistoIndex = function(json, isAll) {
	var index = -1;
	if(typeof json != "object") {
		return -1;
	}
	for(var i = 0; i < this.length; i++) {
		var item = this[i];
		var status = 0;
		var jsonlength = 0;
		for(const key in json) {
			jsonlength++;
			if(json[key] == item[key]) {
				status=status+1 ;
			}
		}
		if(status == jsonlength && isAll) {
			index = i;
			
		}else if(status == jsonlength  ) {
			index = i;
		}
	}
	return index;
}
/**
 * 数据取出其中某字段成为一个新的数组
 * @param {Object} key
 */
Array.prototype.getkeys = function(key) {
	var newArray = [];
	for(var i = 0; i < this.length; i++) {
		newArray.push(this[i][key])
	}
	return newArray;
}
Array.prototype.toJson = function() {
	var json = {};
	for(var i = 0; i < this.length; i++) {
		var item = this[i];
		var key = "";
		for(key in item) {
			json[key] = item[key];
		}
	}
	return json;
}
/**
 * 数据 里json key转为小写
 */
Array.prototype.toLowerCase = function() {
	var newArray = [];
	for(var i = 0; i < this.length; i++) {
		var item = this[i];
		var key = "";
		var newjson = {};
		for(key in item) {
			var name = key.toLowerCase();
			newjson[name] = item[key]
		}
		newArray.push(newjson)
	}
	return newArray;
}
Array.prototype.removeStr = function(str) {
	var index = this.indexOf(str);
	if(index == -1) {
		return this;
	} else {
		this.splice(index, 1);
		return this;
	}
}
/**
 * 数组 自动补齐功能
 * @param {Object} timekey
 * @param {Object} valuekey
 */
Array.prototype.makeUpDate = function(timekey, valuekey, frommatStr) {
	var newList = [];
	if(this.length == 0) {
		//return [];
		//var h = 23 - date.getHours();
		var date = new Date(new Date().frommat("YYYY-MM-DD 00:00:00"));
		var list = makeup(24, date, "frist");
		return list;
	}

	function makeup(size, starth, type) {
		var makeupList = [];

		for(var j = 0; j < size; j++) {
			var json = {};
			var diffh = type == "frist" ? j : j + 1;
			json[timekey] = new Date(starth).diffDate("hh", diffh).frommat(frommatStr)
			json[valuekey] = 0;
			makeupList.push(json)
		}
		return makeupList;
	}

	for(var i = 0; i < this.length; i++) {
		var time = this[i][timekey];
		var date = new Date(time);
		if(i == 0) {
			var h = date.getHours();
			if(h > 0) {
				var fristdate = new Date(date.frommat("YYYY-MM-DD 00:00:00"));
				var list = makeup(h, fristdate, "frist");
				newList = [...list, ...newList];
			}
			newList.push(this[i])
			var h = new Date(this[i + 1][timekey]).getHours() - date.getHours();
			if(h > 1) {
				var list = makeup(h - 1, date);
				newList = [...newList, ...list]
			}
		} else if(i < this.length - 1) {
			newList.push(this[i]);
			var h = new Date(this[i + 1][timekey]).getHours() - date.getHours();
			if(h > 1) {
				var list = makeup(h - 1, date);
				newList = [...newList, ...list]
			}
		} else {
			newList.push(this[i]);
			var h = 23 - date.getHours();
			if(h > 1) {
				var list = makeup(h, date);
				newList = [...newList, ...list]
			}
		}
	}
	return newList;

}
Array.prototype.closeJson = function() {
	let new_obj = this.map((item) => {
		return Object.assign({}, item);
	})
	return new_obj[0];
};
Array.prototype.indexOfCode = function(value, code) {
	if(this.length > 0 && code) {
		var index = -1;
		for(var i = 0; i < this.length; i++) {
			var v2 = this[i][code];
			if(value == v2) {
				index = i;
			}
		}
		return index;
	} else {
		return -1
	}
}
/**
 * 重复关键字的最大值
 * @param {Object} value
 * @param {Object} isAll
 * @param {Object} key
 */
Array.prototype.repeatToIndex = function(value, type, key) {
	var maps = [];
	for(var i = 0; i < this.length; i++) {
		var v2 = this[i];
		if(type == 'string') {
			if(v2.indexOf(value) > -1) {
				var v3 = v2.replace(value, "");
				v3 = v3 ? v3 : 0;
				v3 = parseInt(v3);
				if(isNaN(v3)) {} else {
					maps.push(v3)
				}
			}
		} else {
			var v = v2[key];
			if(v.indexOf(value) > -1) {
				var v3 = v.replace(value, "");
				v3 = v3 ? v3 : 0;
				v3 = parseInt(v3);
				if(isNaN(v3)) {} else {
					maps.push(v3)
				}
			}
		}
	}
	if(maps.length == 0) {
		return -1
	} else {
		var max = Math.max.apply(Math, maps);
		return max;
	}
}
/**
 *  数组根据key进行分组
 * @param {Object} key
 */
Array.prototype.splitKeyToMap = function(key) {
	var ringMaps = {

	}
	this.forEach((item) => {
		var ringno = item[key] || "";
		var ringMapValue = ringMaps[ringno];
		ringMapValue = ringMapValue ? ringMapValue : [];
		ringMapValue.push(item);
		ringMaps[ringno] = ringMapValue;
	})
	//	for(var k in ringMaps){
	//		var v = ringMaps[k];
	//		if(v.length ==0 || !v){
	//			//ringMaps.remove(k);
	//		}
	//	}
	return ringMaps
}
Array.prototype.splitKeyToArr = function(key) {
	var ringMaps = this.splitKeyToMap(key);
	var ringkList = [];
	for(var rkey in ringMaps) {
		var valueList = ringMaps[rkey];
		if(ringMaps[rkey].length > 0) {
			// 来弄隔离带了....

			ringkList.push(ringMaps[rkey])
		}
	};
	if(ringkList.length == 0) {
		return {
			status: false,
			message: "当前key无法进行分组，清重新确认key",
			list: this
		}
	} else {
		return {
			status: true,
			message: "成功分组",
			list: ringkList
		}
	}
}
Array.prototype.getkeyList = function(key, value, returnKey) {
	var arr = [];
	for(var i = 0; i < this.length; i++) {
		var item = this[i];
		var v = item[key];
		var rv = item[returnKey];
		if(v == value) {
			arr = rv;
		}
	}
	return arr
}

