2

私は日付列を持つ Ext.grid を持っています。日付が 1 日オフであることを除いて、すべて正常に動作します。

グリッドのストアにデータを追加すると、値が2013-03-31. あとで、お店のデータを見ると、その値はSat Mar 30 2013 17:00:00 GMT-0700 (US Mountain Standard Time)

明らかに、これはタイムゾーンの問題ですが、修正方法がわかりません。

グリッドのストアにデータを追加するコードは次のとおりです

for (var i = 0; i < dateboxes.length; i++) 
{
    dateboxGrid.store.add(dateboxes[i]);
    //dateboxes[i].Value contains the date in this form: "2013-03-31"
}
console.log(dateboxGrid.getStore()) //logs "Sat Mar 30 2013 17:00:00 GMT-0700 (US Mountain Standard Time)"

dateboxes[i].Value目的の日付が列に表示されるようにするには、ストアに追加する前に何をする必要がありますか?

更新
次の変更を行いました。日付をデータベースに保存するときは、まず.toISOString()データを呼び出します。これで、データがデータベースからストアにロードされると、 としてGMT +0700ロードされ、フィールドにロードされたときに日付が正しく表示されます。
ただし...別のタイムゾーンにいる人には間違って表示されることを意味します。

私が欲しいのはDateだけです。時間も記録したくない。私のアプリケーションでは意味がありません。

4

2 に答える 2

1

これに取り組んでいくうちに、どちらかの問題を克服しなければならないことがわかりました。

(1)datecolumnのエディターで使用しdatefield、ストアのモデルのフィールドが であっtype: 'date'た場合、値は日付 (時刻を含む) としてデータベースに格納されます。日付を取得しようとすると、タイムゾーンが作動して、読み込まれた日付が変更されました。

また

datecolumn(2)ストアのモデルを使用および設定しなかった場合type: 'date'、セルに日付が表示されませんでした。それらは単純な文字列として保存されますが、グリッドに正しく表示されませんでした。

これが私がたどり着いたことです: オプション (1) を使用しましたが、ストアのデータがデータベースに送信される前に、これを行いました:

    for (var i = 0; i < dateboxes.length; i++) {
        if (dateboxes[i].Value != null) {
            var date = new Date(dateboxes[i].Value);
            dateboxes[i].Value = String(date.getFullYear() + '-' + (date.getMonth() + 1) + '-' + date.getDate());
        }
    }

これは基本的に、日付を文字列に変更するだけです。これで、データは単純な文字列としてデータベースに保存されます。グリッドに表示されると、めちゃくちゃになるタイムゾーン情報がありません。月は 0 ベースであるため、コード `(date.getMonth() +1)' があります。

答えを振り返ってみると、何か腑に落ちない。私も何か他のものを変えたに違いありません。いずれにせよ...それは今動作します。

他の誰かが何が起こっているのかをよりよく説明するために、質問を開いたままにします。

于 2013-04-25T23:48:26.987 に答える
0

これはタイムスタンプとは関係ないと思います。encodeDate のソース コードを見ると、ExtJS は月をインクリメントしているように見えますが、日はインクリメントしていないようです。これは彼らの修正の試みだったと思います。javascriptでencodeDateをオーバーライドすることで回避しました:

var fFbegin_settle_date = new Date();

Ext.util.JSON.encodeDate = function(fFbegin_settle_date) {
     //didn't work: return fFdateBegin.format('"Y-m-d"');
    pad = function(n) {
        return n < 10 ? "0" + n : n;
    }
    return '"' + fFdateBegin.getFullYear() + "-" +
    pad(fFdateBegin.getMonth()+1) + "-" +
    pad(fFdateBegin.getDate()+1) + '"';
};
于 2013-08-16T21:07:17.163 に答える