当前位置: 移动技术网 > IT编程>开发语言>JavaScript > Javascript 日期对象Date扩展方法

Javascript 日期对象Date扩展方法

2019年07月30日  | 移动技术网IT编程  | 我要评论

枫木滑板,五柳村加易中文网,莘县网

今天在网上摘抄了些js中操作日期的相关方法,现在与大家分享一下。
复制代码 代码如下:

<script type="text/javascript">
date.prototype.format = function(fmt)
{
//author: meizz
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.prototype.adddays = function(d)
{
this.setdate(this.getdate() + d);
};
date.prototype.addweeks = function(w)
{
this.adddays(w * 7);
};
date.prototype.addmonths= function(m)
{
var d = this.getdate();
this.setmonth(this.getmonth() + m);
if (this.getdate() < d)
this.setdate(0);
};
date.prototype.addyears = function(y)
{
var m = this.getmonth();
this.setfullyear(this.getfullyear() + y);
if (m < this.getmonth())
{
this.setdate(0);
}
};
//测试 var now = new date(); now.adddays(1);//加减日期操作 alert(now.format("yyyy-mm-dd"));
date.prototype.datediff = function(interval,endtime)
{
switch (interval)
{
case "s": //計算秒差
return parseint((endtime-this)/1000);
case "n": //計算分差
return parseint((endtime-this)/60000);
case "h": //計算時差
return parseint((endtime-this)/3600000);
case "d": //計算日差
return parseint((endtime-this)/86400000);
case "w": //計算週差
return parseint((endtime-this)/(86400000*7));
case "m": //計算月差
return (endtime.getmonth()+1)+((endtime.getfullyear()-this.getfullyear())*12)-(this.getmonth()+1);
case "y": //計算年差
return endtime.getfullyear()-this.getfullyear();
default: //輸入有誤
return undefined;
}
}
//测试 var startime = new date("2007/05/12 07:30:00"); var endtime = new date("2008/06/12 08:32:02"); document.writeln("秒差: "+startime .datediff("s",endtime )+"<br>"); document.writeln("分差: "+startime .datediff("n",endtime )+"<br>"); document.writeln("時差: "+startime .datediff("h",endtime )+"<br>"); document.writeln("日差: "+startime .datediff("d",endtime )+"<br>"); document.writeln("週差: "+startime .datediff("w",endtime )+"<br>"); document.writeln("月差: "+startime .datediff("m",endtime )+"<br>"); document.writeln("年差: "+startime .datediff("y",endtime )+"<br>");
</script>


具体扩展的方法如下:
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) {
///<summary>
///解析常用的中文日期并返回日期对象。
///</summary>
///<param name="datestring" type="string">
///日期字符串。包含的格式有:"xxxx(xx)-xx-xx xx:xx:xx","xxxx(xx).xx.xx xx:xx:xx",
///"xxxx(xx)年xx月xx日 xx时xx分xx秒"
///</param>
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) {
///<summary>
///日期加减。
///若returnnewobjec参数为true值,则操作结果由一个新的日期对象返回,原日期对象不变,
///否则返回的是原日期对象,此时原日期对象的值是操作结果.
///</summary>
///<param name="datepart" type="string">
///日期加减的部分:
///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 -- 毫秒
///</param>
///<param name="number" type="int">
///要加减的数量
///</param>
///<param name="returnnewobjec" type="bool">
///是否返回新的日期对象。若参数为true值,则返回一个新的日期对象,否则返回的是当前日期对象.
///</param>
///<returns type="date">
///返回一个日期对象
///</returns>
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) {
///<summary>
///开始日期与当前日期的差,返回差的绝对值。
///</summary>
///<param name="datepart" type="string">
///日期加减的部分:
///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 -- 毫秒
///</param>
///<param name="begindate" type="datetime">
///要用于比较我日期
///</param>
///<returns type="int">
///返回日期差的绝对值。
///</returns>
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 < yeardiff; 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() {
///<summary>
///获取当前日期所在年份中第一个星期的天数
///</summary>
return (7 - new date(this.getfullyear(), 0, 1).getday()); //js里的月份也是从0开始的,0表示1月,依此类推。
}
date.prototype.getlastweekdays = function(year) {
///<summary>
///获取当前日期所在年份中最后一个星期的天数
///</summary>
return (new date(this.getfullyear(), 11, 31).getday() + 1); //js里的月份也是从0开始的,0表示1月,依此类推。
}
date.prototype.getweeksofyear = function() {
///<summary>
///获取当前日期所在年份的周数
///</summary>
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() {
///<summary>
///获取当前日期所在是一年中的第几季。返回一个季度整数值。
///</summary>
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() {
///<summary>
///获取当前日期所在是一年中的第几周。返回一个整数值。
///</summary>
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) < firstweekdays) {
return 1;
}
else if (this.datediff("day", lastdate) < lastweekdays) {
return this.getweeksofyear();
}
else {
return math.ceil((this - secondweekfirstdate) / 1000 / 60 / 60 / 24 / 7) + 1;
}
}

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网