今天工作的时候用到了JS获取日期,在网上一搜罗一大堆,前天的日期就等于获取的日期减去两天就可以,都是类似这种的代码:
<script language="JavaScript" type="text/javascript">
function GetDateStr(AddDayCount)
{
var dd = new Date();
dd.setDate(dd.getDate()+AddDayCount);//获取AddDayCount天后的日期
var y = dd.getYear();
var m = dd.getMonth()+1;//获取当前月份的日期
var d = dd.getDate();
return y+"-"+m+"-"+d;
}
document.write("前天:"+GetDateStr(-2));
document.write("<br />昨天:"+GetDateStr(-1));
document.write("<br />今天:"+GetDateStr(0));
document.write("<br />明天:"+GetDateStr(1));
document.write("<br />后天:"+GetDateStr(2));
document.write("<br />大后天:"+GetDateStr(3));
</script>
这样写有个问题就是 如果今天是31号那么加1就变成了32号了
看似没错,但是当月初的时候问题就出现了,如果今天是2012-07-02 那么结果出来的是 2012-07-00 这是不科学的,正确的方法应该是利用将某天的日期转换成毫秒数,然后减去或者加上N天的1000*60*60*24毫秒数,再将这个值通过setTime换成日期即可。
正确代码如下
function getDay(day){
var today = new Date();
var targetday_milliseconds=today.getTime() + 1000*60*60*24*day;
today.setTime(targetday_milliseconds); //注意,这行是关键代码
var tYear = today.getFullYear();
var tMonth = today.getMonth();
var tDate = today.getDate();
tMonth = doHandleMonth(tMonth + 1);
tDate = doHandleMonth(tDate);
return tYear+"-"+tMonth+"-"+tDate;
}
function doHandleMonth(month){
var m = month;
if(month.toString().length == 1){
m = "0" + month;
}
return m;
}