Java和javaScript关于日期计算上的差异
在做项目计算日期相加减的时候发现了一个问题,代码如下:
Java:
Calendardata=Calendar.getInstance();
data.set(Calendar.MONTH,1);
data.set(Calendar.DATE,29);
data.add(Calendar.MONTH,12);//增加一年
System.out.println(data.getTime().toLocaleString());
打印结果:2009-2-28
javaScript:
vardata=newDate(2008,1,29);
data.setMonth(data.getMonth()+12);//增加一年
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate());
打印结果:2009-3-1
结果发现java和javascipt处理日期的方式有一天的差异,为什么会出现这样的问题呢?是不是只有2月才会出现呢,假如当前日期是2008-03-31
当前日期加上一个月后,代码如下:
Java:
Calendardata=Calendar.getInstance();
data.set(Calendar.MONTH,2);
data.set(Calendar.DATE,31);
data.add(Calendar.MONTH,1);//增加一个月
System.out.println(data.getTime().toLocaleString());
打印结果:2008-4-30
javaScript:
vardata=newDate(2008,2,31);
data.setMonth(data.getMonth()+1);//增加一个月
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate());
打印结果:2008-5-1
当前日期加上两个月后,代码如下:
Java:
Calendardata=Calendar.getInstance();
data.set(Calendar.MONTH,2);
data.set(Calendar.DATE,31);
data.add(Calendar.MONTH,2);//增加两个月
System.out.println(data.getTime().toLocaleString());
打印结果:2008-5-31
javaScript:
vardata=newDate(2008,2,31);
data.setMonth(data.getMonth()+2);//增加两个月
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate());
打印结果:2008-5-31
当前日期加上三个月后,代码如下:
Java:
Calendardata=Calendar.getInstance();
data.set(Calendar.MONTH,2);
data.set(Calendar.DATE,31);
data.add(Calendar.MONTH,3);//增加三个月
System.out.println(data.getTime().toLocaleString());
打印结果:2008-6-30
javaScript:
vardata=newDate(2008,2,31);
data.setMonth(data.getMonth()+3);//增加三个月
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate());
打印结果:2008-7-1
为什么会出现这样的差距呢,原因肯定是java和javascript处理日期的方式不一样,那在什么条件下会出现这样的结果呢?
结论:
当进行日期计算的时候,当前日期的月份必须是大月,并且是在这个月的最后一天也就是31号,比如2008-3-31号,当给这个日期加上一个月,得到的日期是个小月就会出现这样的情况。比如在2008-3-31这天加上一月,那因该是4月份,4月就是小月,那java就是4月30号,javascript就是5月1号,相差一天。当加上2月后,就是5月,5月是大月,那么计算的结果都是5月31号。
解决方法:
在这里也没有什么好的解决方法,就是统一一下计算日期的方式,要么用java的要么用javaScript的。