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的。

相关推荐