选择季度的最后一天

时间:2014-01-19 17:49:25

标签: javascript date

我使用以下功能查找所选日期的最后一天。 现在我只是添加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

2 个答案:

答案 0 :(得分:1)

Live Demo

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"

演示:http://jsbin.com/eZoliye/1/edit?js,console