Javascript 从特定日期到今天的季度列表

Javascript 从特定日期到今天的季度列表,javascript,list,date,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} 最终目的是将其放入组合选择中 有人能帮我吗 提前感谢创建开始日期和结束日期,在循环中增加开始日期

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

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

{Gen-Feb-Mar 2016,
Apr-May-June 2016,
Jul-Ago-Sep 2016,
Oct-Nov-Dec 2016,
Gen-Feb-Mar 2017}
最终目的是将其放入组合选择中

有人能帮我吗


提前感谢

创建开始日期和结束日期,在循环中增加开始日期,直到它等于结束日期,计算四分之一的更改:

//季度定义为一年的四分之一
功能getQuarter(日期){
返回Math.floor(date.getMonth()/3);
}
//季度时间戳将当前年度的产品季度添加到季度数
函数getQuarterTimestamp(日期){
return getQuarter(date)+:“+date.getFullYear();
}
//QuarterStill现在计算过去一个日期的季度数
函数(原文){
//From是原始From的克隆
var from=新日期(origialFrom.getTime());
//今天是什么时候
var to=新日期();
//用于计算两个季度之间的季度数的变量
var=0;
//如果from已成为过去,请将月份添加到from
while(getQuarterTimestamp(from)!=getQuarterTimestamp(to)){
//newFrom定义为from的克隆
var newFrom=新日期(from.getTime());
//加一个月
newFrom.setMonth(newFrom.getMonth()+1);
//如果季度发生变化
如果(getQuarter(newFrom)!=getQuarter(from)){
//加25美分
四分之一++;
}
//覆盖并保持重复
from=newFrom;
}
//报税表季度数
返回宿舍;
}
//试验
var from=新日期();
从2000年开始;

日志(从“过去”,到现在(从),“四分之一以前”)
如果您只是试图构建这里的列表,您可以迭代开始年份与当前年份的差值,然后使用
parseInt(new Date().getMonth()/3+1)计算当前季度。

var d=new Date(),
y=d.getFullYear(),
m=d.getMonth(),
季度=['1-2-3月'、'4-5-6月'、'7-8-9月'、'10-11-12月'],
期权=[];
对于(var pastYear=2016;pastYearoptions.push(q+''+passyear));
}
四分之一.slice(0,parseInt(m/3+1)).forEach(q=>options.push(q+''+y));
控制台日志(“当前日期:+d”);

console.log(选项)假设季度是3个月的部分,因此1月至3月是第一季度,4月至6月是第二季度,等等。然后你可以简单地计算出开始日期的季度,然后继续增加3个月,直到最后一个日期的季度

季度可以表示为yyyyQq,例如2017年6月15日为2017年第二季度。那么,计算季度的方法就是:

Math.ceil(month/3)
函数getQuarter(日期){
返回日期.getFullYear()+'Q'+Math.ceil((date.getMonth()+1)/3);
}
功能列表季度(sDate、eDate){
//确保开工日期较早;
如果(sDate>eDate){
var t=eDate;
eDate=sDate;
sDate=t;
}
//复制输入开始日期不影响原始输入
sDate=新日期(sDate);
//设置为月的第2个月,以便添加月份不会滚动
//而且不受夏令时的影响
设定日期(2);
//使用起始季度初始化结果数组
var startQ=getQuarter(sDate);
var endQ=getQuarter(eDate);
var结果=[startQ];
//自始至终列出季度
while(startQ!=endQ){
sDate.setMonth(sDate.getMonth()+3);
startQ=getQuarter(sDate);
结果推送(startQ);
} 
返回结果;
}
风险值开始=新日期(2016,0,31);//2016年1月31日
var end=新日期();//今天
log('Current quater:'+getQuarter(end));

log('季度列表:'+列表季度(开始,结束))这里有一个解决方案,它不会循环遍历每个日期,只是按程序将季度相加到当前季度,但不包括当前季度

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;

}

我们可以提供帮助,向我们展示您到目前为止所拥有的。您可能想看看此库:您可以从计算特定日期的季度开始,请参阅。你尝试了什么?结合@RobG的链接,你就有了答案。感谢所有帮助我的人!最终,我选择了@Joseph Marikle的解决方案,因为它更符合逻辑的其余部分。在我看来,17年前的某一天,应该有大约17x4个季度,或68个季度。这个答案是51。其他的4年都到哪里去了?我不明白
getQuarter(date)+date.getFullYear()*4
@RobG背后的逻辑你是对的。在
getQuarter
中,我应该除以一个季度的月份(
3
),而不是季度数(
4
)。现在修好了
getQuarterTimestamp
意味着为每个季度获取唯一的id。由于一年中有
4个
季度,因此应该是(
currentQuarter
+
4倍于当前年度
)。我已经用另一种方法生成了ID,希望对您更有意义。
Int
在哪里定义?@RobG,对不起,我弄错了,我的语言弄错了。它应该是整数/floor函数,但在javascript中是
Math.floor()
。我会更正我的答案,谢谢。我喜欢你的解决方案。只有一件事,我从“parseInt(m/3+1)”中删除了+1,因为我只需要结束的四分之一;)@洛伦佐,不客气。很高兴我能帮上忙,并且很好地找到了适合您需要的东西。我有点担心可读性P