我使用以下功能查找所选日期的最后一天。 现在我只是添加12 * Date.WEEK但不完全是我想要的。 你能看一下如何找到季度的最后一天吗?我想在date2的季度的最后一天。
function catcalc(cal) {
var date = cal.date;
var time = date.getTime();
var field = document.getElementById("x_Bis");
if (field == cal.params.inputField) {
field = document.getElementById("x_Von");
time -= 12*Date.WEEK; // substract one week
} else {
time += 12*Date.WEEK; // add one week 6*Date.DAY
}
var date2 = new Date(time);
field.value = date2.print("%d.%m.%Y");
我应该保留函数结构并保留变量的名称。有两个日历字段相互链接。用户只需从日历中选择任何日期(无需时钟时间)。该功能来自http://cimanet.uoc.edu/logica/v2/lib/jscalendar-1.0/doc/html/reference.html。
答案 0 :(得分:1)
function getQ(date) {
var t=new Date(date.getTime()),year=t.getFullYear() // copy
t.setHours(0,0,0,0); // normalise to not get boundary errors
// note months start at 0 in JS
var q1 = new Date(year,2,31),
q2 = new Date(year,5,30),
q3 = new Date(year,8,30),
q4 = new Date(year,11,31);
if (t<=q1) return q1;
if (t<=q2) return q2;
if (t<=q3) return q3;
if (t<=q4) return q4;
}
getQ(new Date()); // today will return 31st of March
在你的代码中,我猜你可以使用
function catcalc(cal) {
var date = cal.date;
var field = document.getElementById("x_Bis");
if (field == cal.params.inputField) {
field = document.getElementById("x_Von");
}
var date2 = getQ(date);
field.value = date2.print("%d.%m.%Y");
}
答案 1 :(得分:1)
扩展@mplungjan提案(并在处理日期时注意JavaScript愚蠢)。我将使用方法链接,因此每个下一个方法都将根据之前的方法返回。
function getLastDayOfQuarter(date) {
var year = date.getFullYear();
var quarterEndings = [[3, 31], [6, 30], [9, 30], [12, 31]];
var toDateObj = function (dates) {
return new Date(year, dates[0] - 1, dates[1]);
};
var isBeforeEndDate = function (endDate) {
return endDate >= date;
}
date.setHours(0, 0, 0, 0);
return quarterEndings
.map(toDateObj)
.filter(isBeforeEndDate)[0];
}
getLastDayOfQuarter(new Date()).toDateString(); // "Mon Mar 31 2014"