原谅我,我在这里和其他地方尝试了几次搜索,但似乎无法解决我目前遇到的问题。有人能帮我弄明白吗?
我试图在JavaScript中从inputdate找到四分之一字符串。对于"01/31/2009",它应该根据作为输入参数给出的偏移量给出Q1,2013 Q4,2012等。当偏移量为0时,则为当前季度,1则为上一季度,2则为前两个季度,等等…
我的当前代码:jsfiddle
function getQuarterStrings(id) {
var d = new Date();
var d = new Date("01/31/2009");
var str;
switch (id) {
...
}
剩余代码在jsfile中。正如你所看到的,它在倒数第二个条件下失败了,尽管一切看起来都很好。请帮我找出我的错误。谢谢你!
你的一些比较是关闭的,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);
}
这是可行的,而且更加简洁。它还允许您使用任何偏移量,而不是一组有限的值:
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;
}
http://jsfiddle.net/dPmf2/6/您还可以通过以下方式摆脱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;
}