如何用js进行日期的加减

JavaScript027

如何用js进行日期的加减,第1张

开始查了查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。

var today=new Date()// 获取今天时间

today.setDate(today.getDate() + 7)// 系统会自动转换

下面是date类提供的三个你可能生成字符串用到的函数:

getDate() 从 Date 对象返回一个月中的某一天 (1 ~ 31)。

getMonth() 从 Date 对象返回月份 (0 ~ 11)。

getFullYear() 从 Date 对象以四位数字返回年份。

用Javascript实现(经测试答案正确):

<html>

<head>

<meta http-equiv="Content-Type" content="text/htmlcharset=uft-8">

<script language="javascript">

function window_onload()

{

var LSTR_Date = "20090115"

//(日期表示只有这一种格式,不支持民国年)

var LSTR_AddDays =45

var LSTR_DateType = "YYYYMMDD"

alert(AddDate(LSTR_Date,LSTR_AddDays,LSTR_DateType))

}

function AddDate(LISTR_Date,LISTR_AddDays,LISTR_DateType)

{

var LSTR_YY=0

var LSTR_MM=0

var LSTR_DD=0

var LINT_FLAG=0

//检查日期格式为 "YYYYMMDD" 或

//"MMDDYYYY" 且长度为8码

if((LISTR_DateType!="YYYYMMDD") &&(LISTR_DateType!="MMDDYYYY") &&(LISTR_Date.length!=8))

return false

if(LISTR_DateType=="MMDDYYYY")

LISTR_Date=LISTR_Date.substr(4,4)+LISTR_Date.substr(0,4)

LSTR_YY=parseInt(LISTR_Date.substr(0,4),10)

LSTR_MM=parseInt(LISTR_Date.substr(4,2),10)

LSTR_DD=parseInt(LISTR_Date.substr(6,2),10)+parseInt(LISTR_AddDays,10)

while(LINT_FLAG==0)

{

switch (LSTR_MM)

{

case 2:

if ((LSTR_YY % 4) != 0)

{

if (LSTR_DD >28)

{

LSTR_DD -=28

LSTR_MM =3

}

else

{

LINT_FLAG=1

}

}

else

{

if (((LSTR_YY % 100) == 0) &&((LSTR_YY % 400) != 0))

{

if (LSTR_DD >28)

{

LSTR_DD -=28

LSTR_MM =3

}

else

{

LINT_FLAG=1

}

}

else

{

if (LSTR_DD >29)

{

LSTR_DD -=29

LSTR_MM =3

}

else

{

LINT_FLAG=1

}

}

}

break

case 4:

case 6:

case 9:

case 11:

if (LSTR_DD >30)

{

LSTR_DD -=30

LSTR_MM +=1

}

else{LINT_FLAG=1}

break

case 1:

case 3:

case 5:

case 7:

case 8:

case 10:

if (LSTR_DD >31)

{

LSTR_DD -=31

LSTR_MM +=1

}

else

{

LINT_FLAG=1

}

break

case 12:

if (LSTR_DD >31)

{

LSTR_DD -=31

LSTR_MM=1

LSTR_YY +=1

}

else

{

LINT_FLAG=1

}

break

default:

return

break

}

}

if (LSTR_MM<10)

{

LSTR_MM="0" +LSTR_MM

}

if (LSTR_DD<10)

{

LSTR_DD="0" +LSTR_DD

}

if(LISTR_DateType=="MMDDYYYY")

return LSTR_MM+""+LSTR_DD+""+LSTR_YY+""

else

return LSTR_YY+""+LSTR_MM+""+LSTR_DD+""

}

</script>

</head>

<body onload="window_onload()">

</body>

</html>