仅当日期变量在当月

时间:2017-02-01 11:07:21

标签: javascript sharepoint html-table

我在脚本中绘制表格,显示一些数据。表中的一列是日期变量 如果该日期变量在当前月份,我希望其行显示在表格中。换句话说,如果日期不在当前月份,我想隐藏整行。

Date列最初是ISO日期格式,但我将其转换为DD.MM.YYYY。有了这个功能:

var Date1 = MyDate;
function formatYMDtoDMY(s)
{
    var b = s.split(/\D/);
    return b[2] + '.' + b[1] + '.' + b[0] + '.';
}

比我在我的表中调用此函数,表中的第3列:

$("#T1").append("<tr align='middle'>" +
  "<td align='left'>"+ID+"</td>" +
  "<td align='left'>"+UserName+"</td>" +
  "<td align='left'>"+formatYMDtoDMY(Date1)+"</td>"+
  "<td align='left'>"+City, State+"</td>"  +      
  "<td align='left'>"+Project name+"</td>"  +
  "<td align='left'>"+Additional info+"</td>"  +
  "</tr>");

我试过这种方式:

if(input.getFullYear() == currentDate.getFullYear()
   && input.getMonth() == currentDate.getMonth()) {
    //  than I post my table
   }  // but all I get displayed is only 1st date

我还以为我可以抓住当月的第一天和最后一天:

var date = new Date(), y = date.getFullYear(), m = date.getMonth();
var firstDay = new Date(y, m, 1);
var lastDay = new Date(y, m + 1, 0);

但我不知道如果在这些变量之间检查日期列如何继续检查,如果是,则在表格中显示行。

1 个答案:

答案 0 :(得分:0)

所以我完全误解了你的问题。

最简单的方法是将您的ISO日期转换为实际日期。 JavaScript Date对象理解ISO日期格式,因此您可以通过调用构造函数来创建日期对象:

var myDateObj = new Date(MyDate);

Date对象使用逻辑运算符,因此我们可以使用firstDay和lastDay对象:

var isCurrent = (firstDay <= myDateObj && myDateObj <= lastDay);

您可以在渲染表时使用它来显示和隐藏行。

$("#T1").append("<tr align='middle' class='" + isCurrent ? 'row-visible' : 'row-hidden' +"'>" +
  "<td align='left'>"+ID+"</td>" +
  "<td align='left'>"+UserName+"</td>" +
  "<td align='left'>"+formatYMDtoDMY(Date1)+"</td>"+
  "<td align='left'>"+City, State+"</td>"  +      
  "<td align='left'>"+Project name+"</td>"  +
  "<td align='left'>"+Additional info+"</td>"  +
  "</tr>");

添加CSS规则:

.row-hidden {
  display: none;
}

.row-visible {
  display: table-row;
}

你可以把它包装成一个单独的函数:

function isCurrentMonth(s) {
  var myDate = new Date(s);
  var date = new Date(), y = date.getFullYear(), m = date.getMonth();
  var firstDay = new Date(y, m, 1);
  var lastDay = new Date(y, m + 1, 0);
  return (firstDay <= myDate && myDate <= lastDay);
}