我需要一个简单的帮助。我希望有一个函数在JavaScript中生成两个日期之间的四分之一的数组(或列表)。第一个是固定的,而第二个日期是今天。
例如:我希望我在2016年的第一天和今天之间有一份季度清单。所以我想有这样的清单
{Gen-Feb-Mar 2016,
Apr-May-June 2016,
Jul-Ago-Sep 2016,
Oct-Nov-Dec 2016,
Gen-Feb-Mar 2017}
最终目的是将其置于组合选择中。
有人能帮帮我吗?
提前致谢
答案 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)
创建开始日期和结束日期,在循环增加开始日期,直到它等于结束日期,计算季度变化:
//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;
答案 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;
}