您好,欢迎访问一九零五行业门户网

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

今天在网上摘抄了些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;
}
}
其它类似信息

推荐信息