欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  web前端

Javascript 日期对象Date扩展方法_时间日期

程序员文章站 2022-03-28 14:15:30
...
今天在网上摘抄了些js中操作日期的相关方法,现在与大家分享一下。
复制代码 代码如下:




具体扩展的方法如下:
parseCHS--静态方法。解析常用的中文日期并返回日期对象。
add--日期加减操作。[注:此函数在上传时还存在一个BUG。请下载后把此函数内的第一行"var regExp = /^\d+$/;" 改为 "var regExp = /^([+-])?\d+$/;", 要不然就做不了减法。]
dateDiff--日期差。开始日期与当前日期的差,返回差的绝对值。
getFirstWeekDays--获取当前日期所在年份中第一个星期的天数。
getLastWeekDays--获取当前日期所在年份中最后一个星期的天数。
getWeeksOfYear--获取当前日期所在年份的周数。
getWeek--获取当前日期所在是一年中的第几周。返回一个整数值。
getSeason--获取当前日期所在是一年中的第几季。返回一个季度整数值。
详细注释及参数,请参考JS文件内的注释。
复制代码 代码如下:

/*
=====================================================================================
Description:Date对象扩展。包括常用中文日期格式解析、加减操作、日期差、周操作和季操作。
Author:Dezwen.
Date:2009-5-30.
=====================================================================================
*/
Date.parseCHS = function(dateString) {
///
///解析常用的中文日期并返回日期对象。
///

///
///日期字符串。包含的格式有:"xxxx(xx)-xx-xx xx:xx:xx","xxxx(xx).xx.xx xx:xx:xx",
///"xxxx(xx)年xx月xx日 xx时xx分xx秒"
///
var regExp1 = /^\d{4}-\d{1,2}-\d{1,2}( \d{1,2}:\d{1,2}:\d{1,2})?$/;
var regExp2 = /^\d{4}\.\d{1,2}\.\d{1,2}( \d{1,2}:\d{1,2}:\d{1,2})?$/;
var regExp3 = /^\d{4}年d{1,2}月d{1,2}日( \d{1,2}时d{1,2}分d{1,2}秒)?$/;
if (regExp1.test(dateString)) { }
else if (regExp2.test(dateString)) {
dateString = dateString.replace(/\./g, "-");
}
else if (regExp3.test(dateString)) {
dateString = dateString.replace("年", "-").replace(
"月", "-").replace("日", "").replace("时", ":").replace("分", ":"
).replace("秒", "");
}
else {
throw "传给Date.parseCHS的参数值的格式不正确。请传递一个有效的日期格式字符串作为参数。";
}
var date_time = dateString.split(" ");
var date_part = date_time[0].split("-");
var time_part = (date_time.length > 1 ? date_time[1].split(":") : "");
if (time_part == "") {
return new Date(date_part[0], date_part[1] - 1, date_part[2]);
}
else {
return new Date(date_part[0], date_part[1] - 1, date_part[2], time_part[0], time_part[1], time_part[2]);
}
}
Date.prototype.add = function(datepart, number, returnNewObjec) {
///
///日期加减。
///若returnNewObjec参数为true值,则操作结果由一个新的日期对象返回,原日期对象不变,
///否则返回的是原日期对象,此时原日期对象的值是操作结果.
///

///
///日期加减的部分:
///Year, yy, yyyy--年
///quarter, qq, q --季
///Month, mm, m -- 月
///dayofyear, dy, y-- 日
///Day, dd, d -- 日
///Week, wk, ww -- 周
///Hour, hh -- 小时
///minute, mi, n -- 分钟
///second, ss, s -- 秒
///millisecond, ms -- 毫秒
///
///
///要加减的数量
///
///
///是否返回新的日期对象。若参数为true值,则返回一个新的日期对象,否则返回的是当前日期对象.
///
///
///返回一个日期对象
///

var regExp = /^\d+$/;
if (regExp.test(number)) {
number = parseInt(number);
}
else { number = 0; }
datepart = datepart.toLowerCase();
var tDate;
if (typeof (returnNewObjec) == "boolean") {
if (returnNewObjec == true) {
tDate = new Date(this);
}
else { tDate = this; }
}
else { tDate = this; }

switch (datepart) {
case "year":
case "yy":
case "yyyy":
tDate.setFullYear(this.getFullYear() + number);
break;
case "quarter":
case "qq":
case "q":
tDate.setMonth(this.getMonth() + (number * 3));
break;
case "month":
case "mm":
case "m":
tDate.setMonth(this.getMonth() + number);
break;
case "dayofyear":
case "dy":
case "y":
case "day":
case "dd":
case "d":
tDate.setDate(this.getDate() + number);
break;
case "week":
case "wk":
case "ww":
tDate.setDate(this.getDate() + (number * 7));
break;
case "hour":
case "hh":
tDate.setHours(this.getHours() + number);
break
case "minute":
case "mi":
case "n":
tDate.setMinutes(this.getMinutes() + number);
break
case "second":
case "ss":
case "s":
tDate.setSeconds(this.getSeconds() + number);
break;
case "millisecond":
case "ms":
tDate.setMilliseconds(this.getMilliseconds() + number);
break;
}
return tDate;
}
Date.prototype.dateDiff = function(datepart, beginDate) {
///
///开始日期与当前日期的差,返回差的绝对值。
///

///
///日期加减的部分:
///Year, yy, yyyy--年 ;
///quarter, qq, q --季
///Month, mm, m -- 月
///dayofyear, dy, y-- 日
///Day, dd, d -- 日
///Week, wk, ww -- 周
///Hour, hh -- 小时
///minute, mi, n -- 分钟
///second, ss, s -- 秒
///millisecond, ms -- 毫秒
///
///
///要用于比较我日期
///
///
///返回日期差的绝对值。
///

datepart = datepart.toLowerCase();
var yearDiff = Math.abs(this.getFullYear() - beginDate.getFullYear());
switch (datepart) {
case "year":
case "yy":
case "yyyy":
return yearDiff;
case "quarter":
case "qq":
case "q":
var qDiff = 0;
switch (yearDiff) {
case 0:
qDiff = Math.abs(this.getSeason() - beginDate.getSeason());
break;
case 1:
qDiff = (this.getSeason() - new Date(this.getFullYear(), 0, 1).getSeason()) +
(new Date(beginDate.getFullYear(), 11, 31).getSeason() -
beginDate.getSeason()) + 1;
break;
default:
qDiff = (this.getSeason() - new Date(this.getFullYear(), 0, 1).getSeason()) +
(new Date(beginDate.getFullYear(), 11, 31).getSeason() -
beginDate.getSeason()) + 1 + (yearDiff - 1) * 4;
break;
}
return qDiff;
case "month":
case "mm":
case "m":
var monthDiff = 0;
switch (yearDiff) {
case 0:
monthDiff = Math.abs(this.getMonth() - beginDate.getMonth());
break;
case 1:
monthDiff = (this.getMonth() - new Date(this.getFullYear(), 0, 1).getMonth()) +
(new Date(beginDate.getFullYear(), 11, 31).getMonth() -
beginDate.getMonth()) + 1;
break;
default:
monthDiff = (this.getMonth() - new Date(this.getFullYear(), 0, 1).getMonth()) +
(new Date(beginDate.getFullYear(), 11, 31).getMonth() -
beginDate.getMonth()) + 1 + (yearDiff - 1) * 12;
break;
}
return monthDiff;
case "dayofyear":
case "dy":
case "y":
case "day":
case "dd":
case "d":
return Math.abs((this.setHours(0, 0, 0, 0) - beginDate.setHours(0, 0, 0, 0)) / 1000 / 60 / 60 / 24);
case "week":
case "wk":
case "ww":
var weekDiff = 0;
switch (yearDiff) {
case 0:
weekDiff = Math.abs(this.getWeek() - beginDate.getWeek());
break;
case 1:
weekDiff = (this.getWeek() - new Date(this.getFullYear(), 0, 1).getWeek()) +
(new Date(beginDate.getFullYear(), 11, 31).getWeek() -
beginDate.getWeek()) + 1;
break;
default:

weekDiff = (this.getWeek() - new Date(this.getFullYear(), 0, 1).getWeek()) +
(new Date(beginDate.getFullYear(), 11, 31).getWeek() -
beginDate.getWeek()) + 1;
var thisYear = this.getFullYear();
for (var i = 1; i weekDiff += new Date(thisYear - i, 0, 1).getWeeksOfYear();
}
break;
}
return weekDiff;
case "hour":
case "hh":
return Math.abs((this - beginDate) / 1000 / 60 / 60);
case "minute":
case "mi":
case "n":
return Math.abs((this - beginDate) / 1000 / 60);
case "second":
case "ss":
case "s":
return Math.abs((this - beginDate) / 1000);
case "millisecond":
case "ms":
return Math.abs(this - beginDate);
}
}
Date.prototype.getFirstWeekDays = function() {
///
///获取当前日期所在年份中第一个星期的天数
///

return (7 - new Date(this.getFullYear(), 0, 1).getDay()); //JS里的月份也是从0开始的,0表示1月,依此类推。
}
Date.prototype.getLastWeekDays = function(year) {
///
///获取当前日期所在年份中最后一个星期的天数
///

return (new Date(this.getFullYear(), 11, 31).getDay() + 1); //JS里的月份也是从0开始的,0表示1月,依此类推。
}
Date.prototype.getWeeksOfYear = function() {
///
///获取当前日期所在年份的周数
///

return (Math.ceil((new Date(this.getFullYear(), 11, 31, 23, 59, 59) -
new Date(this.getFullYear(), 0, 1)) / 1000 / 60 / 60 / 24) -
this.getFirstWeekDays() - this.getLastWeekDays()) / 7 + 2;
}
Date.prototype.getSeason = function() {
///
///获取当前日期所在是一年中的第几季。返回一个季度整数值。
///

var month = this.getMonth();
switch (month) {
case 0:
case 1:
case 2:
return 1;
case 3:
case 4:
case 5:
return 2;
case 6:
case 7:
case 8:
return 3;
default:
return 4;
}
}
Date.prototype.getWeek = function() {
///
///获取当前日期所在是一年中的第几周。返回一个整数值。
///

var firstDate = new Date(this.getFullYear(), 0, 1);
var firstWeekDays = this.getFirstWeekDays();
var secondWeekFirstDate = firstDate.add("dd", firstWeekDays, true);
var lastDate = new Date(this.getFullYear(), 11, 31);
var lastWeekDays = this.getLastWeekDays();
if (this.dateDiff("day", firstDate) return 1;
}
else if (this.dateDiff("day", lastDate) return this.getWeeksOfYear();
}
else {
return Math.ceil((this - secondWeekFirstDate) / 1000 / 60 / 60 / 24 / 7) + 1;
}
}