为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

尚方宝剑之说 2019-07-22 20:00:01
JavaScript中两个日期之间的月份差异如何计算JavaScript中的两个date()对象的差异,同时只返回差异中的月数?任何帮助都是很好的:)
查看完整描述

3 回答

?
暮色呼如

TA贡献1853条经验 获得超9个赞

如果您不考虑这个月中的某一天,那么到目前为止,这是一个更简单的解决方案。

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 = 0December = 11.


查看完整回答
反对 回复 2019-07-22
?
忽然笑

TA贡献1806条经验 获得超5个赞

有时,你可能想得到两个日期之间的月份的数量,完全忽略了日期部分。例如,如果你有两个日期-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;


查看完整回答
反对 回复 2019-07-22
?
紫衣仙女

TA贡献1839条经验 获得超15个赞

“差额中的月数”的定义有很多解释。*-)

您可以从JavaScriptDate对象中获取年份、月份和日期。根据您要寻找的信息,您可以使用这些信息来计算出两个时间点之间的时间间隔是多少个月。

例如,在袖口上,这会发现有多少人。整整几个月介于两个日期之间,不包括部分月(例如,不包括每个月):

function monthDiff(d1, d2) {
    var months;
    months = (d2.getFullYear() - d1.getFullYear()) * 12;
    months -= d1.getMonth() + 1;
    months += d2.getMonth();
    return months <= 0 ? 0 : months;}monthDiff(
    new Date(2008, 10, 4), // November 4th, 2008
    new Date(2010, 2, 12)  // March 12th, 2010);// Result: 15: December 2008, all of 2009, and Jan & Feb 2010monthDiff(
    new Date(2010, 0, 1),  // January 1st, 2010
    new Date(2010, 2, 12)  // March 12th, 2010);// Result: 1: February 2010 is the only full month between themmonthDiff(
    new Date(2010, 1, 1),  // February 1st, 2010
    new Date(2010, 2, 12)  // March 12th, 2010);// Result: 0: There are no *full* months between them

(请注意,JavaScript中的月份值以0=1月开始。)

将小数月包括在上面要复杂得多,因为一个典型的二月份的三天比八月份的三天(~10.714%)要大(~9.677%),当然二月份也是一个移动的目标,这取决于它是否是闰年。

还有一些日期和时间库可用于JavaScript,这可能使这类事情变得更容易。


查看完整回答
反对 回复 2019-07-22
  • 3 回答
  • 0 关注
  • 530 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信