怎么让js中date进行加减运算

JavaScript011

怎么让js中date进行加减运算,第1张

js中没有如同C#中的AddDays的方法,

所以重写了Date对象的prototype,扩展了增加日期的方法,

代码如下:

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"))

开始查了查js的使用文档,但没发现可以直接用的函数,于是就想自己写函数来着,这就要涉及到每个月天数的判断,如果是2月份的话,还要涉及到闰年的判断,虽然不复杂但我想js应该不会这么低级,于是查了下资料,终于有了如下重大发现,以在某个日期上加减天数来说,其实只要调用Date对象的setDate()函数就可以了,具体方法如下:

function addDate(date,days){

var d=new Date(date)

d.setDate(d.getDate()+days)

var m=d.getMonth()+1

return d.getFullYear()+'-'+m+'-'+d.getDate()

}

其中,date参数是要进行加减的日期,days参数是要加减的天数,如果往前算就传入负数,往后算就传入正数,如果是要进行月份的加减,就调用setMonth()和getMonth()就可以了,需要注意的是返回的月份是从0开始计算的,也就是说返回的月份要比实际月份少一个月,因此要相应的加上1。

可以直接相减,获得的结果就是两个时间之间相差的毫秒数,然后可以再从中计算获得相差的年月日时分秒来。

比如下面的代码是获得今年(2018年)剩余的天数:

var d1=new Date()

var d2=new Date(2019,0,1)

var d=parseInt((d2-d1)/1000/3600/24)

console.log("2018年剩余的天数为"+d+"天")