版权声明:zf版权所有 https://blog.csdn.net/u014381542/article/details/89028763
/**
* ========================日期时间操作函数========================
*/
var dateUtil={
/**
* 日期正则yyyy-MM-dd
*/
"dateExp" : /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))$/,
/**
* 时间正则(yyyy-MM-dd hh:mm:ss)
*/
"timeExp" : /^((((1[6-9]|[2-9]\d)\d{2})-(0?[13578]|1[02])-(0?[1-9]|[12]\d|3[01]))|(((1[6-9]|[2-9]\d)\d{2})-(0?[13456789]|1[012])-(0?[1-9]|[12]\d|30))|(((1[6-9]|[2-9]\d)\d{2})-0?2-(0?[1-9]|1\d|2[0-8]))|(((1[6-9]|[2-9]\d)(0[48]|[2468][048]|[13579][26])|((16|[2468][048]|[3579][26])00))-0?2-29-))\s+(([01]\d)|2[0-3]):([0-5]\d):([0-5]\d)$/,
/**
* 获取指定年月的天数
* @param year //年
* @param month //月
* @returns {number}
*/
"getDays" : function(year,month){
var totalDays=30;
if(month==1 || month==3 || month==5 || month==7 || month==8 || month==10 || month==12){
totalDays=31;
}else if(month==2){
if(year%400==0 || (year%100!=0 && year%4==0)){ //闰年2月
totalDays=29;
}else{ //平年2月
totalDays=28;
}
}
return totalDays;
},
/**
* 将单位数字转换为带0的双位数
* @param n //需要转换的数字
* @returns {string}
*/
"toTwo" : function(n){
return n<10?"0"+parseInt(n):n;
},
/**
* 获取今日日期
* @param joinstr //可填,分隔符,默认为"-"
* @returns {string}
*/
"getToday": function(joinstr){
var date = new Date();
var year = date.getFullYear();
var month = this.toTwo(date.getMonth() + 1);
var day = this.toTwo(date.getDate());
var fenge = joinstr ? joinstr : "-"; //分隔字符
var s = year + fenge + month + fenge + day;
return s;
},
/**
* 获取指定日期前一天的日期
* @param date //指定日期
* @returns {*|string}
*/
"getYesterday" : function(date){
if(!this.dateExp.test(date)){
console.log("日期格式不正确:"+date);
return;
}
return this.getAfterDaysLocale(date,-1);
},
/**
* 获取指定日期后一天的日期
* @param date //指定日期
* @returns {*|string}
*/
"getTomorrow" : function(date){
if(!this.dateExp.test(date)){
console.log("日期格式不正确:"+date);
return;
}
return this.getAfterDaysLocale(date,1);
},
/**
* 获取指定日期本地时间后n天的日期,支持负数(北京处于东八区,即8点之后才开始算当天)
* @param date //指定日期
* @param n //间隔天数
* @returns {string}
*/
"getAfterDaysLocale" : function(date,n) {
var s, d, t, t2;
/**
* new Date("2018-01-01")问题:
在pc端浏览器或者微信开发者工具中都正常,但是在手机端计算结果为NAN,
需要将格式转为yyyy/MM/dd(2018/01/01)或者new Date(yyyy,MM,dd);
*/
date = date.replace(/[^\d]/g, '/');
t = new Date(date).getTime();
t2 = n * 1000 * 3600 * 24;
t += t2;
d = new Date(t);
s = d.getFullYear() + "-";
s += this.toTwo(d.getMonth()+1)+ "-";
s += this.toTwo(d.getDate());
return s;
},
/**
* 获取UTC时间后n天的日期,支持负数
* @param yy
* @param mm
* @param dd
* @param n
* @returns {string}
*/
"getAfterDaysUTC" : function(yy,mm,dd,n) {
var s, d, t, t2;
t= Date.UTC(yy,mm-1,dd);
t2 = n * 1000 * 3600 * 24;
t+= t2;
d = new Date(t);
s = d.getUTCFullYear() + "-";
s += ("00"+(d.getUTCMonth()+1)).slice(-2) + "-";
s += ("00"+d.getUTCDate()).slice(-2);
return s;
},
/**
* 获取该年已过去天数&剩余天数
* @param startYMD //指定日期,可填,默认今日
* @returns {{pastDays: number, leftDays: number}}
*/
"getLeftPastDays": function(startYMD){
startYMD = startYMD?startYMD.replace(/[^\d]/g, '/'):"";
var today = startYMD ? new Date(startYMD) : new Date(),
thisYear = today.getFullYear(),
startDay = new Date(thisYear + "/01/01"),
endDay = new Date(thisYear + "/12/31");
var pastDays = parseInt((today.getTime() - startDay.getTime()) / (1000 * 60 * 60 * 24)),
leftDays = parseInt((endDay.getTime() - today.getTime()) / (1000 * 60 * 60 * 24));
return { "pastDays": pastDays, "leftDays": leftDays };
},
/**
* 获取两个日期之间相差的天数
* @param startDate
* @param endDate
* @returns {number}
*/
"getDateDiff": function (startDate, endDate) {
var startTime = new Date(Date.parse(startDate.replace(/-/g, "/"))).getTime();
var endTime = new Date(Date.parse(endDate.replace(/-/g, "/"))).getTime();
var dates = Math.abs((startTime - endTime)) / (1000 * 60 * 60 * 24);
return dates;
},
/**
* 获取两个时间的时间差,转换成分
* @param time1
* @param time2
* @returns {number}
*/
"getMinutesDiff" : function(time1,time2){
var date1 = new Date();
var date2 = new Date();
date1.setHours(time1.split(":")[0],time1.split(":")[1]);
date2.setHours(time2.split(":")[0],time2.split(":")[1]);
var diff = ((date2.getTime() - date1.getTime())/1000)/60;
return diff;
},
/**
* 获取现在到指定日期之间的秒数
* @param endDate //截止日期
* @returns {number}
*/
"getSecondDiff": function (endDate) {
var startTime = new Date().getTime();
var endTime = new Date(Date.parse(endDate.replace(/-/g, "/"))).getTime();
var seconds = (endTime - startTime) / 1000;
return parseInt(seconds);
},
/**
* 时间戳转换成hh:mm:ss
* @param mss //时间戳
* @returns {{s: (*|string), h: (*|string), days: number, time: string, m: number}}
*/
"transTime": function (mss){
mss = mss*1000;
var days = parseInt(mss / (1000 * 60 * 60 * 24));
var h = parseInt((mss % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60)) + days*24;
var m = parseInt((mss % (1000 * 60 * 60)) / (1000 * 60));
var s = (mss % (1000 * 60)) / 1000;
h = this.toTwo(h);
m = this.toTwo(m);
s = this.toTwo(s);
return {
time: h + ":" + m + ":" + s,
days: days,
h: h,
m: m,
s: s
}
},
/**
* 周数字转文字
* @param num
* @returns {string}
*/
"transToWeek": function (num) {
switch (num) {
case 0: return "日"; break;
case 1: return "一"; break;
case 2: return "二"; break;
case 3: return "三"; break;
case 4: return "四"; break;
case 5: return "五"; break;
case 6: return "六"; break;
case 7: return "日"; break;
}
},
/**
* 获取当前时间表示字符串:
12:00-13:00(下午12:00-12:59)
13:00-24:00(下午1:00-11:59)
* @param time
* @returns {string}
*/
"getTimeType" : function(time){
var hour = Number(time.split(":")[0]);
return hour<12 ? "早上" : "下午";
},
/**
* 获取日期的相关格式信息: yyyy-MM-dd hh:mm:ss
* @param dateparam //可填,指定日期,默认为今天
* @returns {{formatdate: string, seconds: (*|string), month: (*|string), hour: (*|string), year: number, minutes: (*|string), hmstime: string, ymddate: string, day: (*|string)}}
*/
"getFormatDate": function(dateparam){
var date = new Date();
if (dateparam){
dateparam = dateparam.replace(/-/g, "/");
date = new Date(dateparam);
}
var year = date.getFullYear();
var month = this.toTwo(date.getMonth() + 1);
var day = this.toTwo(date.getDate());
var hour = this.toTwo(date.getHours());
var minutes = this.toTwo(date.getMinutes());
var seconds = this.toTwo(date.getSeconds());
var ymddate = year + "-" + month + "-" + day;
var hmstime = hour + ":" + minutes + ":" + seconds;
var formatdate = year + "-" + month + "-" + day + " " + hour + ":" + minutes + ":" + seconds;
return {
year: year,
month: month,
day: day,
hour: hour,
minutes: minutes,
seconds: seconds,
ymddate: ymddate,
hmstime: hmstime,
formatdate: formatdate
};
}
}
/**
* 功能: 日期格式化输出
alert(new Date().format("yyyy年MM月dd日"));
alert(new Date().format("MM/dd/yyyy"));
alert(new Date().format("M/d/yyyy"));
alert(new Date().format("yyyyMMdd"));
alert(new Date().format("yyyy-MM-dd hh:mm:ss"));
new Date("2016-01-01").format("yyyyMMdd")或new Date("2016/01/01").format("yyyyMMdd")
* @param fmt
* @returns {*}
*/
Date.prototype.format = function(fmt) {
var o = {
"M+" : this.getMonth() + 1, // 月份
"d+" : this.getDate(), // 日
"h+" : this.getHours(), // 小时
"m+" : this.getMinutes(), // 分
"s+" : this.getSeconds(), // 秒
"q+" : Math.floor((this.getMonth() + 3) / 3), // 季度
"S" : this.getMilliseconds() // 毫秒
};
if (/(y+)/.test(fmt))
fmt = fmt.replace(RegExp.$1, (this.getFullYear() + "")
.substr(4 - RegExp.$1.length));
for ( var k in o)
if (new RegExp("(" + k + ")").test(fmt))
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length == 1) ? (o[k])
: (("00" + o[k]).substr(("" + o[k]).length)));
return fmt;
}
/**
* 对Date的扩展,将 Date 转化为指定格式的String
* 月(M)、日(d)、12小时(h)、24小时(H)、分(m)、秒(s)、周(E)、季度(q) 可以用 1-2 个占位符
* 年(y)可以用 1-4 个占位符,毫秒(S)只能用 1 个占位符(是 1-3 位的数字)
* eg:
* (new Date()).pattern("yyyy-MM-dd hh:mm:ss.S") ==> 2006-07-02 08:09:04.423
* (new Date()).pattern("yyyy-MM-dd E HH:mm:ss") ==> 2009-03-10 二 20:09:04
* (new Date()).pattern("yyyy-MM-dd EE hh:mm:ss") ==> 2009-03-10 周二 08:09:04
* (new Date()).pattern("yyyy-MM-dd EEE hh:mm:ss") ==> 2009-03-10 星期二 08:09:04
* (new Date()).pattern("yyyy-M-d h:m:s.S") ==> 2006-7-2 8:9:4.18
*/
Date.prototype.pattern=function(fmt) {
var o = {
"M+" : this.getMonth()+1, //月份
"d+" : this.getDate(), //日
"h+" : this.getHours()%12 == 0 ? 12 : this.getHours()%12, //小时
"H+" : this.getHours(), //小时
"m+" : this.getMinutes(), //分
"s+" : this.getSeconds(), //秒
"q+" : Math.floor((this.getMonth()+3)/3), //季度
"S" : this.getMilliseconds() //毫秒
};
var week = {
"0" : "/u65e5",
"1" : "/u4e00",
"2" : "/u4e8c",
"3" : "/u4e09",
"4" : "/u56db",
"5" : "/u4e94",
"6" : "/u516d"
};
if(/(y+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, (this.getFullYear()+"").substr(4 - RegExp.$1.length));
}
if(/(E+)/.test(fmt)){
fmt=fmt.replace(RegExp.$1, ((RegExp.$1.length>1) ? (RegExp.$1.length>2 ? "/u661f/u671f" : "/u5468") : "")+week[this.getDay()+""]);
}
for(var k in o){
if(new RegExp("("+ k +")").test(fmt)){
fmt = fmt.replace(RegExp.$1, (RegExp.$1.length==1) ? (o[k]) : (("00"+ o[k]).substr((""+ o[k]).length)));
}
}
return fmt;
}