请原谅我,我在这里和其他地方尝试了几次搜索,但似乎无法解决我目前遇到的问题。有人可以帮我解决一下吗?
我试图在JavaScript中找到inputdate的四分之一字符串。对于“01/31/2009”,它应根据作为输入参数给出的偏移量给出Q1,2013 Q4,2012等。当偏移量为0时,则为当前季度,1为先前,2为先前的2季度等...
我目前的代码:jsfiddle
function getQuarterStrings(id) {
var d = new Date();
var d = new Date("01/31/2009");
var str;
switch (id) {
...
}
剩下的代码在jsfiddle中。正如你所看到的,即使一切似乎都没问题,它也会在倒数第二个条件下失败。请帮我弄清楚我的错误。谢谢!
答案 0 :(得分:2)
您的某些比较已经结束,而Date
会尝试弥补您setMonth
没有多少天的月份。这段代码应该有效:
function getQuarterStrings(id) {
var d = new Date("03/31/2009");
d.setDate(1);
d.setMonth(d.getMonth() - id * 3);
var month = d.getMonth() + 1;
var year = d.getFullYear();
var quarter = Math.ceil(month / 3);
return ("Q" + quarter + ", " + year);
}
答案 1 :(得分:1)
这很有效,而且更简洁。它还允许您使用任何偏移量而不是有限的一组值:
function getQuarterStrings(date, id) {
// quarter is 0-based here
var quarter = Math.floor(date.getMonth() / 3),
year = date.getFullYear();
quarter -= id;
if(quarter < 0) {
var yearsChanged = Math.ceil(-quarter / 4);
year -= yearsChanged;
// Shift quarter back to a nonnegative number
quarter += 4 * yearsChanged;
}
return "Q" + (quarter + 1) + ", " + year;
}
答案 2 :(得分:0)
你也可以通过这样做摆脱switch语句:
function getQuarterStrings(id) {
var d = new Date();
var d = new Date("01/31/2009");
var str;
if (id !== 0){
d.setMonth(d.getMonth() - 3*id);
}
str = getQuarter(d);
return str;
}