2

date.js を使用して条件付き書式をデータ グリッドに適用しています。データは JavaScript 配列から解析されます。これを除いて、私の条件はすべて正しく機能しています:

if (値 < 今日 && 値 > '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.js を使用しているため、ドキュメントで説明されているように、比較機能を使用できます。

Date.compare ( 日付 date1, 日付 date2 ) : 数値

最初の日付と 2 番目の日付を比較し、それらの相対値を示す数値を返します。-1 = これは日付未満です。0 = 値は等しい。1 = これは日付よりも大きいです。

コード例については、ドキュメントを参照してください。

于 2013-04-08T19:02:23.067 に答える
1

この問題を回避する最善の方法は、Date オブジェクトを文字列に変換しないことです。"01-17-2014" < "04-08-2013"は true であるため true と評価されるため"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 に答える
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 に答える