2

我正在使用 date.js 将条件格式应用于数据网格。数据是从 javascript 数组中解析的。我的所有条件都正常工作,除了这个:

if (val < 今天 && 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);
    }
}
4

4 回答 4

1

解决此问题的最佳方法是不要将 Date 对象转换为字符串。"01-17-2014" < "04-08-2013"评估为真,因为"01" < "04"它是真的,所以任何附加到这些字符串上的东西总是会以相同的方式进行评估。但是,在 Date 对象上使用小于/大于运算符将按预期运行。因此,您可以将现有的 if 语句修改为

if (new Date(val) < new Date(today) && new Date(val) > new Date('01-01-2000'))

这将解决您的问题,但您最好使用 Date 对象开始。

于 2013-04-08T18:23:23.947 回答
1

由于您使用的是 date.js,因此您可以使用它的比较功能,如文档中所述:

Date.compare(日期 date1,日期 date2):数字

比较第一个日期和第二个日期并返回它们相对值的数字指示。-1 = 这是小于日期。0 = 值相等。1 = 这大于日期。

有关代码示例,请参阅文档。

于 2013-04-08T19:02:23.067 回答
1

您可能无法在 UI 中更改日期字符串的格式,但后端的格式无关紧要。您应该更改代码以使用ISO 8601,该标准旨在允许以字符串格式进行轻松比较(以及其他优点)。

然后,您的日期格式yyyy-MM-dd将允许您将它们作为字符串进行比较。

而且因为它是相关的,如果你还在犹豫,请查看这部 XKCD 漫画。

于 2013-04-08T19:10:18.693 回答
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);
    }
}
于 2013-04-08T21:25:43.857 回答