如何在JavaScript中获得两年的月份范围

How to get a range of months over a span of two years in JavaScript

本文关键字:两年 范围 JavaScript      更新时间:2023-09-26

我希望根据用户选择的范围获得前几个月的范围。例如,用户选择:July-2015到September-2015。我可以使用下面的对象获得数字月份值。

var months = {January: 1, February: 2, March: 3, April: 4, May: 5, June: 6, July: 7, August: 8, September: 9, October: 10, November: 11, December: 12};

然后我可以使用这个逻辑来计算出之前的范围- http://jsfiddle.net/0cq5nprt/

var currStartMonth = 7,
  currEndMonth = 9,
  monthRange = (currEndMonth - currStartMonth) + 1,
  prevStartMonth = currStartMonth - monthRange,
  prevEndMonth = (prevStartMonth + monthRange) - 1;

我遇到的问题是,当范围超过两年的跨度时,它就像: 2014年12月至2015年1月。这里应该是2014年10月到2014年11月。

希望我的问题很清楚。任何建议都会很有帮助!

我想你在计算时应该使用年。如下所示

var yearDiff = endYear - currentYear
if yearDiff = 0 {
   monthRange = (currEndMonth - currStartMonth) + 1,
   prevStartMonth = currStartMonth - monthRange,
   prevEndMonth = (prevStartMonth + monthRange) - 1;
} else {
   calcEndMonth = calcEndMonth + 12
   monthRange = (calcEndMonth - currStartMonth) + 1,
   prevStartMonth = curgstartmonth - monthRange,
   prevEndMonth = (prevStartMonth + monthRange) - 1;
   if prevEndMonth > 12 {
      prevEndYear = curEndYear - 1
      prevEndMonth = prevEndMonth - 12
   }
}

考虑到你的例子2014年12月至2015年1月

var yearDiff = endYear - currentYear
// yearDiff = 2015 - 2014 = 1
{
   calcEndMonth = calcEndMonth + 12
   //calcEndMonth = 1 + 12 = 13
   monthRange = (calcEndMonth - currStartMonth) + 1,
   //monthRange = (13 - 12) + 1 = 2
   prevStartMonth = curStartmonth - monthRange,
   //prevStartMonth = 12 (December) - 2 = 10(October)
   prevEndMonth = (prevStartMonth + monthRange) - 1;
   //prevEndMonth = (10 + 2) - 1 = 11(November)
   if prevEndMonth > 12 {
      prevEndYear = curEndYear - 1
      prevEndMonth = prevEndMonth - 12
   }