2013-11-15 179 views
0

我正在创建一个交通灯系统,它可以动态比较今天的截止日期和相应的填充计算列。我能够对其进行编码,但用户更改了需求。他们希望它显示该物品是否在未来5天内到期,而不是黄色红绿灯显示物品是否到期。JavaScript减去日期

我希望将它从“else if(fieldDate == today)”改为今天的前五天。我无法弄清楚在JavaScript中创建today - 5对象的正确方法。帮帮我!

<script type="text/javascript"> 
//<!-- This script searches for calculated fields that are "marked" vith "Due:" and   --> 
//<!-- Create a calculated field in the list with the following formula:     --> 
//<!-- =IF(DueDate="","N/A","Due: "&MONTH(DueDate)&"/"&DAY(DueDate)&"/"&YEAR(DueDate))  --> 
//<!-- The data type returned from this formula is: Date and Time       --> 
// call script 

findDatefields(); 
function findDatefields() { 
    var d = new Date(); 
    var today = new Date(d.getFullYear(), d.getMonth(), d.getDate()).getTime(); 
    var arr = document.getElementsByTagName('td'); 
    for (var i = 0; i < arr.length; i++) { 

     // Check if it is "our field" 

     if ((arr[i].className == "ms-vb2") && (arr[i].innerHTML.indexOf("Due:") == 0)) { 
      var sepDate = arr[i].innerHTML.substring(5).split("/", 3); 
      var m = sepDate[0]; 
      var d = sepDate[1]; 
      var y = sepDate[2]; 

      // build the datestring 
      var fieldDate = new Date(y, m - 1, d, 00, 00, 00).getTime(); 
      if (fieldDate > today) { 
       arr[i].innerHTML = "<IMG src='_layouts/images/KPIDefault-0.gif' Title='On track' />"; 
      } 

      else if (fieldDate == today) { 
       arr[i].innerHTML = "<IMG src='_layouts/images/KPIDefault-1.gif' Title='Due today' />"; 

      } 

      else { 
       arr[i].innerHTML = "<IMG src='_layouts/images/KPIDefault-2.gif' Title='Overdue' />"; 
      } 
     } 
    } 
} 

// For it to work in collapsed views 

function ExpGroupRenderData(htmlToRender, groupName, isLoaded) { 
    var tbody = document.getElementById("tbod" + groupName + "_"); 
    var wrapDiv = document.createElement("DIV"); 
    wrapDiv.innerHTML = "<TABLE><TBODY id=\"tbod" + groupName + "_\" isLoaded=\"" + isLoaded + "\">" + htmlToRender + "</TBODY></TABLE>"; 
    tbody.parentNode.replaceChild(wrapDiv.firstChild.firstChild, tbody); 
    findDatefields(); 
} 
</script> 

回答

0

我误以为你的fieldDate和今天是Date对象,当它们实际上只是longs(毫秒)。这是你想要做的。

else if ((fieldDate - today) <= 432000000) 

背后的逻辑是在我后面的评论之一。

如果你想对刚刚5天,单次检查:

else if (fieldDate == (today + 432000000)); 
+0

我想这一点,这是行不通的。我想在今天之前设置一个5天的变量,然后将其与该变量进行比较。 fieldDate必须大于或等于Today - 5(即最近5天内) – thunderxlt

+0

已更新为在5天内执行检查。 –

+0

您也可以用您在其他地方设置的变量替换5。 –