我试图看看如何在Javascript中填写像这样的时间序列中缺少的财务季度:
["2012-Q2","2012-Q4","2013-Q4","2014-Q1","2014-Q2","2014-Q3",
"2014-Q4","2015-Q1","2015-Q2","2015-Q3","2015-Q4","2016-Q1",
"2016-Q2","2016-Q3","2016-Q4","2017-Q1","2017-Q2","2017-Q3",
"2017-Q4","2018-Q1"]
"2012-Q2"
之前的第一个季度以及最后一个元素" 2018-Q1"之后的最后三个季度。我知道moment.js
具有quarter()
或fquarter()
等功能(通过插件),但我正在寻找更接近其他方式的东西。我已经有了季度(作为日期字符串),我必须将它们解析为日期对象。
我需要填补"四分之一洞"在这些输入字符串值之间。
在我的情况下,我可能需要首先解析那些自定义格式的日期字符串,使它们成为moment
可以理解的东西,但我有点迷失。在这里https://momentjs.com/docs/#/parsing/string-format/,潜在格式可能涉及Y
多年,Q
为季度,但我不知道如何在每个输入日期字符串中转义文字Q
那个数组?
另外假设我可以以某种方式将所有这些日期字符串解析为moment
个对象,那么我不确定这有助于填补漏洞吗?
我找不到涉及日期类型的纯JavaScript解决方案。
另一种方法可能是解析那些日期字符串并使用substring
获取年份和季度数字,然后手动填写检查年/季度对的孔,有什么比这简单吗?
答案 0 :(得分:1)
为什么不制作一个从特定范围返回季度的函数?
function getQuarters(startYear, endYear){
var times = [];
for(var i = startYear; i <= endYear; i++){
times.push(i + "-Q1");
times.push(i + "-Q2");
times.push(i + "-Q3");
times.push(i + "-Q4");
}
return times;
}
通话:
getQuarters(2017,2017);
返回:
["2017-Q1", "2017-Q2", "2017-Q3", "2017-Q4"]
答案 1 :(得分:1)
假设你想得到一个缺少值的数组,你可以采用一个开始的四分之一和cehck来反对给定的数据来推动四分之一或递增数组的索引。
function incQ(time) {
time[1]++;
if (time[1] === 5) {
time[0]++;
time[1] = 1;
}
}
var quarters = ["2012-Q2", "2012-Q4", "2013-Q4", "2014-Q1", "2014-Q2", "2014-Q3", "2014-Q4", "2015-Q1", "2015-Q2", "2015-Q3", "2015-Q4", "2016-Q1", "2016-Q2", "2016-Q3", "2016-Q4", "2017-Q1", "2017-Q2", "2017-Q3", "2017-Q4", "2018-Q1"],
actual = quarters[0].split('-Q'),
missing = [],
i = 0;
while (i < quarters.length) {
if (actual.join('-Q') !== quarters[i]) {
missing.push(actual.join('-Q'));
} else {
i++;
}
incQ(actual);
}
console.log(missing);
&#13;
答案 2 :(得分:1)
假设您需要输入数组的第一个到最后一个之间的完整四分之一列表,您可以:
moment(String, String)
作为格式参数,使用Escaping charaters解析数组的第一个和最后一个元素,请参阅文档的isSameOrBefore
部分。add(1, 'Q')
函数)从'YYYY[-Q]Q'
循环到start
,每次迭代添加1个季度(Application Variable)这是一个实时样本:
end
var quarters = ["2012-Q2","2012-Q4","2013-Q4","2014-Q1","2014-Q2","2014-Q3",
"2014-Q4","2015-Q1","2015-Q2","2015-Q3","2015-Q4","2016-Q1",
"2016-Q2","2016-Q3","2016-Q4","2017-Q1","2017-Q2","2017-Q3",
"2017-Q4","2018-Q1"];
var format = 'YYYY[-Q]Q';
var start = moment(quarters[0], format);
var end = moment(quarters[quarters.length-1], format);
var results = [];
while( start.isSameOrBefore(end) ){
results.push(start.format(format));
start.add(1, 'Q');
}
console.log(results);