(function ($, ht) {
"use strict";
$.extend(ht, {
clickTimeRange:function(){
//点击重置按钮,时间文本框内容清空
$('#btnClear').on('click', function () {
$('#selectedInfo').text('')
$('.selectInfo ul li').removeClass('selectActive');
$('.selectMenu li').removeClass('selectActive');
$('.selectMenu li').eq(0).addClass('selectActive');
$('#timeStart').val('');
$('#timeEnd').val('');
})
//加载时间选择--年份下拉的option
var myDate = new Date();
var yearOption = ``;
for (var i = -1; i < 4; i++) {
if (i == 0) {
yearOption += `<option vlaue="${myDate.getFullYear() - i}" selected = "selected">${myDate.getFullYear() - i}</option>`
} else {
yearOption += `<option vlaue="${myDate.getFullYear() - i}">${myDate.getFullYear() - i}</option>`
}
};
$("#selectYear").append(yearOption);
//选择时间类型
$('.selectMenu li').on('click', function () {
$(this).addClass('selectActive').siblings().removeClass('selectActive');
let thisText = $(this).text();
switch (thisText) {
case '常用':
$('.selectInfo_common').show().siblings().hide();
break;
case '月份':
$('.selectInfo_month').show().siblings().hide();
break;
case '季度':
$('.selectInfo_quarter').show().siblings().hide();
break;
case '半年':
$('.selectInfo_halfofyear').show().siblings().hide();
break;
default:
$('.selectInfo_thisyear').show().siblings().hide();
break;
}
});
//点击常用的选择
$('.selectInfo_common ul li').on('click', function () {
$('.selectInfo ul li').removeClass('selectActive')
$(this).addClass('selectActive');
$('#timeStart').val('');
$('#timeEnd').val('');
$('#selectedInfo').text($(this).text());
});
//点击其他的并显示时间
$('.selectInfo_month ul li,.selectInfo_quarter ul li,.selectInfo_halfofyear ul li,.selectInfo_thisyear ul li').on('click', function () {
$('.selectInfo ul li').removeClass('selectActive')
$(this).addClass('selectActive');
let optionInfo = $('#selectYear').val();
$('#timeStart').val('');
$('#timeEnd').val('');
$('#selectedInfo').attr('data-year', optionInfo);
$('#selectedInfo').text(optionInfo + ' 年 ' + $(this).text());
});
//时间详细点击添加到显示信息中
$('#selectedInfo').click(function () {
if ($('.SelectInfo_box').css('display') == 'none') {
$('.SelectInfo_box').show();
} else {
$('.SelectInfo_box').hide();
}
});
//面板确定
$('#btn_makesure').click(function () {
var timeStart = $('#timeStart').val();
var timeEnd = $('#timeEnd').val();
if (timeStart || timeEnd) {
if (new Date(timeStart) > new Date(timeEnd)) {
layer.alert('结束时间不能早于开始时间')
return false
}
$('.selectItem ul li').removeClass('selectActive');//li 内选中的去除
$('.selectMenu li').removeClass('selectActive');
$('.selectMenu li').eq(0).addClass('selectActive');
$('#selectedInfo').text(timeStart + '至' + timeEnd);
StartDate = timeStart
EndDate = timeEnd
} else {
for (var i = 0; i < $('.common_ul li').length; i++) {
if ($('.common_ul li').eq(i).attr('class') == 'selectActive') {
let optionInfo = $('#selectYear').val();
$('#selectedInfo').attr('data-year', optionInfo);
let selectText = $('.common_ul li').eq(i).text();
$('#selectedInfo').text(optionInfo + '年' + selectText);
$('.SelectInfo_box').hide();
return;
}
};
};
$('.SelectInfo_box').hide();
})
$('#btn_cancel').click(function () {
$('.SelectInfo_box').hide();
})
},
//根据传来的div的值,解析成开始日期和结束日期
charParseDate: function (infoStr) {
var res;
if (infoStr.length < 4) {
res = ht.getCommonRange(infoStr)
} else if (infoStr.length > 3 && infoStr.indexOf('月') > -1) {
res = ht.getMonthRange(infoStr)
} else if (infoStr.length > 3 && infoStr.indexOf('季度') > -1) {
res = ht.getQuarterRange(infoStr)
} else if (infoStr.length > 3 && infoStr.indexOf('半年') > -1) {
res = ht.getHalfYearRange(infoStr)
} else if (infoStr.length > 3 && infoStr.indexOf('年度') > -1) {
res = ht.getYearRange(infoStr)
}
return res;
},
//常用的日期选择范围
getCommonRange: function (infoStr) {
var res;
switch (infoStr){
case '今日':
res = ht.getToday();
break;
case '昨日':
res = ht.getYesterday();
break;
case '上周':
res = ht.getPreWeek();
break;
case '本周':
res = ht.getWeek();
break;
case '上月':
res = ht.getPreMonth();
break;
case '本月':
res = ht.getMonth();
break;
case '上半年':
res = ht.getFirstHalfYear();
break;
case '下半年':
res = ht.getSecondHalfYear();
break;
case '上季度':
res = ht.getPreQuarter();
break;
case '本季度':
res = ht.getCurrentQuarter();
break;
}
return res;
},
//如果计算是某一月
getMonthRange:function(infoStr){
var res = {
begin: '',
end: ''
}
var resStr = infoStr.replace(/\s*/g, "");
var year = resStr.substr(0, 4)
var month = resStr.substring(resStr.indexOf("年") + 1, resStr.indexOf("月"))
var currentDate = new Date(year, month - 1, '01')
var endDate = currentDate.DateAdd('m', 1).DateAdd('d', -1);
res.begin = ht.formatDate(currentDate, 'yyyy-MM-dd 00:00:00');
res.end = ht.formatDate(endDate, 'yyyy-MM-dd 23:59:59');
return res;
},
//获取季度的
getQuarterRange: function (infoStr) {
var resStr = infoStr.replace(/\s*/g, "");
var year = resStr.substr(0, 4)
var quarter = resStr.substring(resStr.indexOf("第") + 1, resStr.indexOf("季度"))
return ht.getQuarterRangeByOrder(year, quarter);
},
getQuarterRangeByOrder: function (Year, quarter) {
var res = {
begin: '',
end: ''
};
switch (quarter) {
case "1":
res.begin = Year + "-01-01 00:00:00";
res.end = Year + "-03-31 23:59:59";
break;
case "2":
res.begin = Year + "-04-01 00:00:00";
res.end = Year + "-06-30 23:59:59";
break;
case "3":
res.begin = Year + "-07-01 00:00:00";
res.end = Year + "-09-30 23:59:59";
break;
case "4":
res.begin = Year + "-10-01 00:00:00";
res.end = Year + "-12-31 23:59:59";
break;
}
return res;
},
//获取半年的
getHalfYearRange: function (infoStr) {
var res = {
begin: '',
end: ''
};
var resStr = infoStr.replace(/\s*/g, "");
var year = resStr.substr(0, 4)
if (infoStr.indexOf('上半年') > -1) {
res.begin = year + "-01-01 00:00:00";
res.end = year + "-06-30 23:59:59";
} else {
res.begin = year + "-07-01 00:00:00";
res.end = year + "-12-31 23:59:59";
}
return res;
},
//年度
getYearRange: function (infoStr) {
var res = {
begin: '',
end: ''
};
var resStr = infoStr.replace(/\s*/g, "");
var year = resStr.substr(0, 4)
res.begin = year + "-01-01 00:00:00";
res.end = year + "-12-31 23:59:59";
return res;
},
// 字串转化成日期
parseDate: function (strDate) {
var myDate;
if (strDate.indexOf("/Date(") > -1)
myDate = new Date(parseInt(strDate.replace("/Date(", "").replace(")/", ""), 10));
else
myDate = new Date(Date.parse(strDate.replace(/-/g, "/").replace("T", " ").split(".")[0]));//.split(".")[0] 用来处理出现毫秒的情况,截取掉.xxx,否则会出错
return myDate;
},
// 日期格式化v日期,format:格式
formatDate: function (v, format) {
if (!v) return "";
var d = v;
if (typeof v === 'string') {
if (v.indexOf("/Date(") > -1)
d = new Date(parseInt(v.replace("/Date(", "").replace(")/", ""), 10));
else
d = new Date(Date.parse(v.replace(/-/g, "/").replace("T", " ").split(".")[0]));//.split(".")[0] 用来处理出现毫秒的情况,截取掉.xxx,否则会出错
}
var o = {
"M+": d.getMonth() + 1, //month
"d+": d.getDate(), //day
"h+": d.getHours(), //hour
"m+": d.getMinutes(), //minute
"s+": d.getSeconds(), //second
"q+": Math.floor((d.getMonth() + 3) / 3), //quarter
"S": d.getMilliseconds() //millisecond
};
if (/(y+)/.test(format)) {
format = format.replace(RegExp.$1, (d.getFullYear() + "").substr(4 - RegExp.$1.length));
}
for (var k in o) {
if (new RegExp("(" + k + ")").test(format)) {
format = format.replace(RegExp.$1, RegExp.$1.length == 1 ? o[k] : ("00" + o[k]).substr(("" + o[k]).length));
}
}
return format;
},
// 获取当前时间;format为格式
getDate: function (format, strInterval, Number) {
var myDate = new Date();
if (!!strInterval) {
myDate = myDate.DateAdd(strInterval, Number);
}
var res = ht.formatDate(myDate, format);
return res;
},
//今日
getToday:function(){
var res = {
begin: '',
end: ''
}
var today = new Date();
res.begin = ht.formatDate(today, 'yyyy-MM-dd 00:00:00')
res.end = ht.formatDate(today, 'yyyy-MM-dd 23:59:59')
return res
},
//昨日
getYesterday:function(){
var res = {
begin: '',
end: ''
};
res.begin = ht.formatDate(new Date(new Date().setDate(new Date().getDate() - 1)), 'yyyy-MM-dd 00:00:00');
res.end = ht.formatDate(new Date(new Date().setDate(new Date().getDate() - 1)), 'yyyy-MM-dd 23:59:59')
return res;
},
// 周
getWeek:function(){
var res = {
begin: '',
end: ''
};
var now = new Date();
var nowYear = now.getFullYear();//当前年
var nowDayOfWeek = now.getDay(); //今天本周的第几天
var nowDay = now.getDate(); //当前日
var nowMonth = now.getMonth(); //当前月
var weekStart = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek + 1);
var weekEnd = new Date(nowYear, nowMonth, nowDay + (7 - nowDayOfWeek));
res.begin = ht.formatDate(weekStart, 'yyyy-MM-dd 00:00:00');
res.end = ht.formatDate(weekEnd, 'yyyy-MM-dd 23:59:59')
return res;
},
getPreWeek:function(){
var res = {
begin: '',
end: ''
};
var now = new Date();
var nowYear = now.getFullYear();//当前年
var nowDayOfWeek = now.getDay(); //今天本周的第几天
var nowDay = now.getDate(); //当前日
var nowMonth = now.getMonth(); //当前月
var weekStartDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek - 6);
var weekEndDate = new Date(nowYear, nowMonth, nowDay - nowDayOfWeek);
res.begin = ht.formatDate(weekStartDate, 'yyyy-MM-dd 00:00:00');
res.end = ht.formatDate(weekEndDate, 'yyyy-MM-dd 23:59:59');
return res;
},
// 月
getMonth: function () {
var res = {
begin: '',
end: ''
};
var currentDate = ht.parseDate(ht.formatDate(new Date(), "yyyy-MM-01"));
var endDate = currentDate.DateAdd('m', 1).DateAdd('d', -1);
res.begin = ht.formatDate(currentDate, 'yyyy-MM-dd 00:00:00');
res.end = ht.formatDate(endDate, 'yyyy-MM-dd 23:59:59');
return res;
},
getPreMonth: function () {
var res = {
begin: '',
end: ''
};
var currentDate = ht.parseDate(ht.formatDate(new Date(), "yyyy-MM-01"));
var preMonth = currentDate.DateAdd('d', -1);
res.begin = ht.formatDate(preMonth, 'yyyy-MM-01 00:00:00');
res.end = ht.formatDate(preMonth, 'yyyy-MM-dd 23:59:59');
return res;
},
// 季度
getCurrentQuarter: function () {
var currentDate = new Date();
return ht.getQuarter(currentDate.getFullYear(), currentDate.getMonth());
},
getPreQuarter: function () {
var currentDate = new Date().DateAdd('q', -1);
return ht.getQuarter(currentDate.getFullYear(), currentDate.getMonth());
},
getQuarter: function (Year, month) {
var res = {
begin: '',
end: ''
};
switch (month) {
case 0:
case 1:
case 2:
res.begin = Year + "-01-01 00:00:00";
res.end = Year + "-03-31 23:59:59";
break;
case 3:
case 4:
case 5:
res.begin = Year + "-04-01 00:00:00";
res.end = Year + "-06-30 23:59:59";
break;
case 6:
case 7:
case 8:
res.begin = Year + "-07-01 00:00:00";
res.end = Year + "-09-30 23:59:59";
break;
case 9:
case 10:
case 11:
res.begin = Year + "-10-01 00:00:00";
res.end = Year + "-12-31 23:59:59";
break;
}
return res;
},
// 年
getYear: function () {
var currentDate = new Date();
var res = {
begin: '',
end: ''
};
var year = currentDate.getFullYear();
res.begin = year + '-01-01 00:00:00';
res.end = year + '-12-31 23:59:59';
return res;
},
getPreYear: function () {
var currentDate = new Date();
var res = {
begin: '',
end: ''
};
var year = currentDate.getFullYear() - 1;
res.begin = year + '-01-01 00:00:00';
res.end = year + '-12-31 23:59:59';
return res;
},
getFirstHalfYear: function () {
var currentDate = new Date();
var res = {
begin: '',
end: ''
};
var year = currentDate.getFullYear();
res.begin = year + '-01-01 00:00:00';
res.end = year + '-06-30 23:59:59';
return res;
},
getSecondHalfYear: function () {
var currentDate = new Date();
var res = {
begin: '',
end: ''
};
var year = currentDate.getFullYear();
res.begin = year + '-07-01 00:00:00';
res.end = year + '-12-31 23:59:59';
return res;
}
});
//+---------------------------------------------------
//| 日期计算
//+---------------------------------------------------
Date.prototype.DateAdd = function (strInterval, Number) {
var dtTmp = this;
switch (strInterval) {
case 's': return new Date(Date.parse(dtTmp) + (1000 * Number));// 秒
case 'n': return new Date(Date.parse(dtTmp) + (60000 * Number));// 分
case 'h': return new Date(Date.parse(dtTmp) + (3600000 * Number));// 小时
case 'd': return new Date(Date.parse(dtTmp) + (86400000 * Number));// 天
case 'w': return new Date(Date.parse(dtTmp) + ((86400000 * 7) * Number));// 星期
case 'q': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number * 3, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());// 季度
case 'm': return new Date(dtTmp.getFullYear(), (dtTmp.getMonth()) + Number, dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());// 月
case 'y': return new Date((dtTmp.getFullYear() + Number), dtTmp.getMonth(), dtTmp.getDate(), dtTmp.getHours(), dtTmp.getMinutes(), dtTmp.getSeconds());// 年
}
}
//+---------------------------------------------------
//| 比较日期差 dtEnd 格式为日期型或者 有效日期格式字符串
//+---------------------------------------------------
Date.prototype.DateDiff = function (strInterval, dtEnd) {
var dtStart = this;
if (typeof dtEnd == 'string')//如果是字符串转换为日期型
{
dtEnd = ht.parseDate(dtEnd);
}
switch (strInterval) {
case 's': return parseInt((dtEnd - dtStart) / 1000);
case 'n': return parseInt((dtEnd - dtStart) / 60000);
case 'h': return parseInt((dtEnd - dtStart) / 3600000);
case 'd': return parseInt((dtEnd - dtStart) / 86400000);
case 'w': return parseInt((dtEnd - dtStart) / (86400000 * 7));
case 'm': return (dtEnd.getMonth() + 1) + ((dtEnd.getFullYear() - dtStart.getFullYear()) * 12) - (dtStart.getMonth() + 1);
case 'y': return dtEnd.getFullYear() - dtStart.getFullYear();
}
}
//+---------------------------------------------------
//| 取得当前日期所在月的最大天数
//+---------------------------------------------------
Date.prototype.MaxDayOfDate = function () {
var myDate = this;
var ary = myDate.toArray();
var date1 = (new Date(ary[0], ary[1] + 1, 1));
var date2 = date1.DateAdd('m', 1);
var result = dateDiff(date1.Format('yyyy-MM-dd'), date2.Format('yyyy-MM-dd'));
return result;
}
//---------------------------------------------------
// 判断闰年
//---------------------------------------------------
Date.prototype.isLeapYear = function () {
return (0 == this.getYear() % 4 && ((this.getYear() % 100 != 0) || (this.getYear() % 400 == 0)));
}
})(jQuery, top.ht);