在做项目计算日期相加减的时候发现了一个问题,代码如下:
Java:
Calendar data = 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:
var data = new Date( 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:
Calendar data = 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:
var data = new Date( 2008,2,31 );
data.setMonth( data.getMonth() + 1 ); //增加一个月
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate() );
打印结果:2008-5-1
当前日期加上两个月后,代码如下:
Java:
Calendar data = 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:
var data = new Date( 2008,2,31 );
data.setMonth( data.getMonth() + 2 ); //增加两个月
alert(data.getYear()+"-"+(data.getMonth()+1)+"-"+data.getDate() );
打印结果:2008-5-31
当前日期加上三个月后,代码如下:
Java:
Calendar data = 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:
var data = new Date( 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的。
分享到:
相关推荐
无论是JavaScript还是Java,计算两个日期之间相差天数的基本原理都是相似的:先将日期转换为统一的时间单位(通常是毫秒),然后计算两个时间单位之间的差值,并将其转换为所需的单位(如天)。在实际开发中,还需要...
综上所述,日期计算涉及日期表示、闰年规则、时区转换、编程语言中的日期处理工具以及精度和范围检查等多个方面。掌握这些知识点对于编写高效、准确的日期计算程序至关重要。通过学习和实践,我们可以更好地应对与...
"指定两个日期计算相隔的天数"这一功能通常涉及日期函数的使用,这些函数能够帮助我们快速地得出两个日期间的差距,即天数。这里我们将详细探讨如何实现这一功能,以及相关的编程语言和工具。 1. **通用方法**: ...
3. **日期对象与时间处理**:JavaScript的`Date`对象是处理日期和时间的基础。开发者可能用它来获取当前日期,计算月份的天数,以及判断是否为闰年等。 4. **循环与条件判断**:在生成日历的过程中,循环结构(如`...
1. **日期对象和库**:在大多数编程语言中,都有内置的日期和时间对象,例如Python的`datetime`模块,Java的`java.util.Date`或`java.time`包,JavaScript的`Date`对象等。这些对象允许开发者创建、操作和格式化日期...
在编程领域,计算两个日期之间的差值是一项常见的任务,它涉及到日期和时间的处理。本文将深入探讨如何在各种编程语言中计算日期相隔的时间,包括天数、分钟和秒数,以及时间间隔的计算方法。 首先,让我们理解日期...
以下将详细介绍如何在不同的编程语言和环境中计算两个日期之间的差异。 1. **Python** 在Python中,我们可以使用`datetime`模块来处理日期和时间。计算日期差的基本方法是创建两个`datetime`对象,然后用减法操作...
以下是关于Java JDK 1.8的一些关键知识点,特别是针对64位和32位系统的差异: 1. **Java版本**:Java 1.8是Oracle公司发布的Java平台标准版(Java SE)的一个版本,也被称为Java 8。这个版本在2014年发布,引入了...
1. **日期计算**:在项目中,我们经常需要计算两个日期之间的差值,或是根据当前日期向前或向后推算一定天数的日期。这在财务结算、合同到期提醒、数据分析等领域尤为重要。 2. **时区处理**:全球化的应用需要处理...
3. 语法:BeanShell的语法接近Java,但并不完全相同,有些特性如类型转换和异常处理与Java略有差异,需要了解其特有规则。 总的来说,BeanShell是Java开发中的一个强大工具,它提供了灵活的脚本能力,使开发者能够...
在JavaScript中,处理日期和时间是一种常见的需求,尤其是在开发涉及日期计算的应用时。本篇文章将详细介绍如何使用JavaScript进行日期之间的相减操作,并给出一个示例代码片段来演示具体实现过程。 #### 二、基本...
3. **日期计算**:计算两个日期之间的差值,用于计算年龄、工龄或者项目持续时间。 4. **国际化**:根据用户地区设置日期格式,如美国的mm/dd/yyyy和欧洲的dd/mm/yyyy。 5. **数据库交互**:在数据库查询中,日历...
My97日期控件是一个强大的JavaScript日期选择器,它提供了丰富的自定义选项和易于使用的API。在本例中,可能使用了My97控件让用户选择起始和结束日期,然后通过上述JavaScript方法计算补休天数。My97控件的用法大致...
尽管名字中包含"Java",但JavaScript与Java语言实际上并无太多关联,两者在语法和用途上都有显著差异。 1. JavaScript简介及作用 - JavaScript是什么?JavaScript是一种客户端脚本语言,主要在用户的浏览器上运行...
此外,还可以使用各种编程语言中的日期和时间库,如Python的datetime模块,JavaScript的Date对象,Java的java.time包等,来实现日期的运算。 "计算历史天数"功能涉及到日期的减法操作。例如,用户输入自己的出生...
- **日期对象**: 操作日期和时间的方法。 - **算数对象**: 未明确指出具体含义,可能是数值计算相关的对象或方法。 - **正则表达式**: 处理字符串匹配和搜索的功能。 - **文档对象模型 (DOM)**: 访问和操作 HTML ...
它最初被命名为LiveScript,但为了与Sun Microsystems的Java语言搭上关系,更名为JavaScript,尽管两者在语法和用途上存在显著差异。 ### JavaScript基础知识 JavaScript的基础包括变量、数据类型、操作符、语句和...
在开发工具方面,日期和时间的处理也可以通过第三方库来增强,例如JavaScript中的moment.js和luxon,或者Python的dateutil。这些库提供了更高级的功能,如时区转换、日期解析和格式化模板等。 在源码层面,理解日期...
例如,自定义函数可能优化了性能,或者处理了某些特殊情况,如跨越世纪的日期计算,或者考虑到不同的历法。 为了更好地理解这些函数,我们需要解压文件并查看源代码。通常,源代码会包含注释来解释函数的用途、输入...
7. Moment.js:时间日期处理库,它提供了丰富的API,帮助开发者方便地进行日期和时间的格式化、比较和计算。 8. Axios或Fetch API:用于发起HTTP请求的库,相比原生XMLHttpRequest,它们更易于使用,支持Promise,...