我正在使用date.js将条件格式应用于数据网格。数据是从javascript数组中解析出来的。我的所有条件都正常工作,除了这个:
if(val< today&& val> '01 -01-2000')
val是MM-dd-yyyy格式的字符串,我无法更改。所以我使用date.js将今天的日期转换为MM-dd-yyyy格式的字符串并进行比较。问题是01-17-2014被视为不到04-08-2013 - 因为它正在比较字符串。
最好的方法是什么?
我想简单一点,这就是我首先转换为字符串的原因,但我不知道如何解决这一年的问题。
感谢您的帮助!
var today = new Date.today().toString("MM-dd-yyyy");
var tomorrow = new Date.today().addDays(1).toString("MM-dd-yyyy");
var upcoming = new Date.today().addDays(7).toString("MM-dd-yyyy");
function eXcell_edncl(cell) {
this.base = eXcell_edn;
this.base(cell);
this.setValue = function(val) {
if (val.indexOf('ACT') >= 0) this.cell.style.backgroundColor="lightgreen";
else if (val.indexOf('PV') >= 0) this.cell.style.backgroundColor="lightgreen", this.cell.style.fontSize="20px";
else if (val.indexOf('YES') >= 0) this.cell.style.backgroundColor="lightgreen", this.cell.style.fontSize="20px";
else if (val < today && val > '01-01-2000') this.cell.style.backgroundColor="red";
else if (val == today) this.cell.style.backgroundColor="orange";
else if (val == tomorrow) this.cell.style.backgroundColor="yellow";
else if (val > tomorrow && val <= upcoming) this.cell.style.backgroundColor="lightyellow";
else this.cell.style.backgroundColor="";
this.cell.innerHTML = this.grid._aplNF(val, this.cell._cellIndex);
}
}
答案 0 :(得分:1)
解决此问题的最佳方法是不将Date对象转换为字符串。 "01-17-2014" < "04-08-2013"
的计算结果为true,因为"01" < "04"
为真,因此无论添加到这些字符串上的是什么,都会以相同的方式进行评估。但是,在Date对象上使用小于/大于运算符将按预期运行。因此,您可以将现有的if语句修改为
if (new Date(val) < new Date(today) && new Date(val) > new Date('01-01-2000'))
这将解决您的问题,但您可能最好使用Date对象开始。
答案 1 :(得分:1)
由于您使用的是date.js,因此您可以使用其比较功能,如documentation所述:
Date.compare(Date date1,Date date2):Number
将第一个日期与第二个日期进行比较,并返回其相对值的数字指示。 -1 =这比日期少。 0 =值相等。 1 =这比日期更重要。
请参阅文档以获取代码示例。
答案 2 :(得分:1)
您可能无法在UI中更改日期字符串的格式,但它在后端的格式无关紧要。您应该更改代码以使用ISO 8601,其设计允许以字符串格式轻松比较(以及其他优点)。
您的日期格式为yyyy-MM-dd
,这样您就可以将它们作为字符串进行比较。
因为它是相关的,如果你还在,请查看this XKCD comic。
答案 3 :(得分:0)
结束以下工作。需要解析出现的值:
var today = new Date.today().toString("MM-dd-yyyy");
var today2 = new Date.today();
var old = new Date(2000, 0, 1);
var tomorrow = new Date.today().addDays(1).toString("MM-dd-yyyy");
var upcoming = new Date.today().addDays(7).toString("MM-dd-yyyy");
function eXcell_edncl(cell) {
this.base = eXcell_edn;
this.base(cell);
this.setValue = function(val) {
var val2 = new Date.parse(val);
if (val.indexOf('ACT') >= 0) this.cell.style.backgroundColor="lightgreen";
else if (val.indexOf('PV') >= 0) this.cell.style.backgroundColor="lightgreen", this.cell.style.fontSize="20px";
else if (val.indexOf('YES') >= 0) this.cell.style.backgroundColor="lightgreen", this.cell.style.fontSize="20px";
else if (val2 < today2 && val2 > old) this.cell.style.backgroundColor="red";
else if (val == today) this.cell.style.backgroundColor="orange";
else if (val == tomorrow) this.cell.style.backgroundColor="yellow";
else if (val > tomorrow && val <= upcoming) this.cell.style.backgroundColor="lightyellow";
else this.cell.style.backgroundColor="";
this.cell.innerHTML = this.grid._aplNF(val, this.cell._cellIndex);
}
}