猿问

JavaScript中两个日期之间的月份差异

JavaScript中两个日期之间的月份差异

如何计算JavaScript中的两个date()对象的差异,同时只返回差异中的月数?

任何帮助都是很好的:)


尚方宝剑之说
浏览 531回答 3
3回答

暮色呼如

如果您不考虑这个月中的某一天,那么到目前为止,这是一个更简单的解决方案。function monthDiff(dateFrom, dateTo) {  return dateTo.getMonth() - dateFrom.getMonth() +     (12 * (dateTo.getFullYear() - dateFrom.getFullYear()))}//examplesconsole.log(monthDiff(new Date(2000, 01), new Date(2000, 02))) // 1console.log(monthDiff(new Date(1999, 02), new Date(2000, 02))) // 12 full yearconsole.log(monthDiff(new Date(2009, 11), new Date(2010, 0))) // 1请注意,月份索引是基于0的。这意味着January = 0和December = 11.

忽然笑

有时,你可能想得到两个日期之间的月份的数量,完全忽略了日期部分。例如,如果你有两个日期-2013/06/21和2013/10/18-而你只关心2013/06和2013/10年度的部分,以下是设想和可能的解决方案:var date1=new Date(2013,5,21);//Remember, months are 0 based in JSvar date2=new Date(2013,9,18);var year1=date1.getFullYear();var year2=date2.getFullYear();var month1=date1.getMonth();var month2=date2.getMonth();if(month1===0){ //Have to take into account   month1++;   month2++;}var numberOfMonths;1.如果您只想要两个日期之间的月份数(不包括月份1和月份2)numberOfMonths = (year2 - year1) * 12 + (month2 - month1) - 1;2.如果你想包括这两个月中的任何一个numberOfMonths = (year2 - year1) * 12 + (month2 - month1);3.如果你想把这两个月都包括进去numberOfMonths = (year2 - year1) * 12 + (month2 - month1) + 1;

紫衣仙女

“差额中的月数”的定义有很多解释。*-)您可以从JavaScriptDate对象中获取年份、月份和日期。根据您要寻找的信息,您可以使用这些信息来计算出两个时间点之间的时间间隔是多少个月。例如,在袖口上,这会发现有多少人。整整几个月介于两个日期之间,不包括部分月(例如,不包括每个月):function&nbsp;monthDiff(d1,&nbsp;d2)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;var&nbsp;months; &nbsp;&nbsp;&nbsp;&nbsp;months&nbsp;=&nbsp;(d2.getFullYear()&nbsp;-&nbsp;d1.getFullYear())&nbsp;*&nbsp;12; &nbsp;&nbsp;&nbsp;&nbsp;months&nbsp;-=&nbsp;d1.getMonth()&nbsp;+&nbsp;1; &nbsp;&nbsp;&nbsp;&nbsp;months&nbsp;+=&nbsp;d2.getMonth(); &nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;months&nbsp;<=&nbsp;0&nbsp;?&nbsp;0&nbsp;:&nbsp;months;}monthDiff( &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2008,&nbsp;10,&nbsp;4),&nbsp;//&nbsp;November&nbsp;4th,&nbsp;2008 &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2010,&nbsp;2,&nbsp;12)&nbsp;&nbsp;//&nbsp;March&nbsp;12th,&nbsp;2010);//&nbsp;Result:&nbsp;15:&nbsp;December&nbsp;2008,&nbsp;all&nbsp;of&nbsp;2009,&nbsp;and&nbsp;Jan&nbsp;&&nbsp;Feb&nbsp;2010monthDiff( &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2010,&nbsp;0,&nbsp;1),&nbsp;&nbsp;//&nbsp;January&nbsp;1st,&nbsp;2010 &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2010,&nbsp;2,&nbsp;12)&nbsp;&nbsp;//&nbsp;March&nbsp;12th,&nbsp;2010);//&nbsp;Result:&nbsp;1:&nbsp;February&nbsp;2010&nbsp;is&nbsp;the&nbsp;only&nbsp;full&nbsp;month&nbsp;between&nbsp;themmonthDiff( &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2010,&nbsp;1,&nbsp;1),&nbsp;&nbsp;//&nbsp;February&nbsp;1st,&nbsp;2010 &nbsp;&nbsp;&nbsp;&nbsp;new&nbsp;Date(2010,&nbsp;2,&nbsp;12)&nbsp;&nbsp;//&nbsp;March&nbsp;12th,&nbsp;2010);//&nbsp;Result:&nbsp;0:&nbsp;There&nbsp;are&nbsp;no&nbsp;*full*&nbsp;months&nbsp;between&nbsp;them(请注意,JavaScript中的月份值以0=1月开始。)将小数月包括在上面要复杂得多,因为一个典型的二月份的三天比八月份的三天(~10.714%)要大(~9.677%),当然二月份也是一个移动的目标,这取决于它是否是闰年。还有一些日期和时间库可用于JavaScript,这可能使这类事情变得更容易。
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答