特定日期和今天之间的季度列表

时间:2017-06-14 13:29:39

标签: javascript list date

我需要一个简单的帮助。我希望有一个函数在JavaScript中生成两个日期之间的四分之一的数组(或列表)。第一个是固定的,而第二个日期是今天。

例如:我希望我在2016年的第一天和今天之间有一份季度清单。所以我想有这样的清单

{Gen-Feb-Mar 2016,
Apr-May-June 2016,
Jul-Ago-Sep 2016,
Oct-Nov-Dec 2016,
Gen-Feb-Mar 2017}

最终目的是将其置于组合选择中。

有人能帮帮我吗?

提前致谢

4 个答案:

答案 0 :(得分:1)

如果您只想构建此处的列表,可以迭代开始年份与当前年份的差异,然后使用parseInt(new Date().getMonth() / 3 + 1)计算当前季度

var d = new Date(),
  y = d.getFullYear(),
  m = d.getMonth(),
  quarters = ['Jan-Feb-Mar', 'Apr-May-Jun', 'Jul-Aug-Sep', 'Oct-Nov-Dec'],
  options = [];

for (var pastYear = 2016; pastYear < y; pastYear++) {
  quarters.forEach(q => options.push(q + ' ' + pastYear));
}
quarters.slice(0, parseInt(m / 3 + 1)).forEach(q => options.push(q + ' ' + y));

console.log("current date: " + d);
console.log(options);

答案 1 :(得分:0)

创建开始日期和结束日期,在循环增加开始日期,直到它等于结束日期,计算季度变化:

&#13;
&#13;
//A quarter is defined as a fourth of a year
function getQuarter(date) {
  return Math.floor(date.getMonth() / 3);
}
//A quartertimestamp adds the product quarters of the current year to the quartercount
function getQuarterTimestamp(date) {
  return getQuarter(date) + ":" + date.getFullYear();
}
//quartersTillNow calculates how many quarters in the past a date is
function quartersTillNow(origialFrom) {
  //From is a clone of origialFrom
  var from = new Date(origialFrom.getTime());
  //To is today
  var to = new Date();
  //Variable to count number of quarters between
  var quarters = 0;
  //While from is in the past, add month to from
  while (getQuarterTimestamp(from) != getQuarterTimestamp(to)) {
    //newFrom is defined as a clone of from
    var newFrom = new Date(from.getTime());
    //Add a month
    newFrom.setMonth(newFrom.getMonth() + 1);
    //If quarter has changed
    if (getQuarter(newFrom) != getQuarter(from)) {
      //Add a quarter
      quarters++;
    }
    //overwrite from and keep repeat
    from = newFrom;
  }
  //return count of quarters
  return quarters;
}
//TEST
var from = new Date();
from.setFullYear(2000);
console.log(from, "was", quartersTillNow(from), "quarters ago");
&#13;
&#13;
&#13;

答案 2 :(得分:0)

假设季度是3个月的部分,所以Jan-Mar是Q1,4月 - 6月是Q2等等,那么你可以简单地计算开始日期的四分之一,然后继续增加3个月,直到你到达季度最后一次约会。

宿舍可以表示为yyyyQq,例如2017年6月15日是2017Q2。然后计算季度就是:

Math.ceil(month/3)

function getQuarter(date) {
  return date.getFullYear() + 'Q' + Math.ceil((date.getMonth()+ 1)/3);
}

function listQuarters(sDate, eDate) {

  // Ensure start is the earlier date;
  if (sDate > eDate) {
    var t = eDate;
    eDate = sDate;
    sDate = t;
  }

  // Copy input start date do don't affect original
  sDate = new Date(sDate);
  
  // Set to 2nd of month so adding months doesn't roll over
  // and not affected by daylight saving
  sDate.setDate(2);

  // Initialise result array with start quarter
  var startQ = getQuarter(sDate);
  var endQ   = getQuarter(eDate);
  var result = [startQ];
  
  // List quarters from start to end
  while (startQ != endQ) {
    sDate.setMonth(sDate.getMonth() + 3);
    startQ = getQuarter(sDate);
    result.push(startQ);
  } 
  
  return result;
}

var start = new Date(2016,0,31);  // 31 Jan 2016
var end   = new Date();           // Today

console.log('Current quater: ' + getQuarter(end));
console.log('Quarter list  : ' + listQuarters(start, end));

答案 3 :(得分:0)

这是一个不会在每个日期循环的解决方案,只是在程序上添加季度,但不包括当前季度。

function listQuarters(sDate, eDate) {

    //Get the quarter of the current month
    var sQuarter = Math.floor((sDate.getMonth()-1)/3)+1;
    var eQuarter = Math.floor((eDate.getMonth()-1)/3)+1;

    var sYear = sDate.getYear();
    var eYear = eDate.getYear();

    var quarterNames = ['Jan-Feb-Mar', 'Apr-May-Jun', 'Jul-Aug-Sep', 'Oct-Nov-Dec'];
    var quarterList = [];

    while(sQuarter != eQuarter && sYear != eYear) {

        quarterList.push(sYear + ' Q' + quarterNames[sQuarter-1]);

        sQuarter++;

        if(sQuarter > 4) {
            sQuarter = 1;
            sYear++;
        }
    }

    return quarterList;

}