0

データベースから取得され、リストに表示する必要がある現在の時刻と前回の時刻の差を計算する必要があるアプリを作成しています。アプリはインドでは正常に動作しますが、同じアプリが米国で実行されると、差が -2560 秒などで表示されます。どうしてこれなの?

時間の差を計算するために使用したコード:

var timeAgoInWords = function(date) {
    try {
        var now = Math.ceil(Number(new Date()) / 1000),
            dateTime = Math.ceil(Number(new Date(date)) / 1000),
            diff = now - dateTime,
            str;

        if (diff < 60) {
            return String(diff) + ' seconds ago';
        } else if (diff < 3600) {
            str = String(Math.ceil(diff / (60)));
            return str + (str == "1" ? ' minute' : ' minutes') + ' ago';
        } else if (diff < 86400) {
            str = String(Math.ceil(diff / (3600)));
            return str + (str == "1" ? ' hour' : ' hours') + ' ago';
        } else if (diff < 60 * 60 * 24 * 365) {
            str = String(Math.ceil(diff / (60 * 60 * 24)));
            return str + (str == "1" ? ' day' : ' days') + ' ago';
        } else {
            return Ext.Date.format(new Date(date), 'jS M \'y');
        }
    } catch (e) {
        return '';
    }
};

上記の関数は から呼び出してitemTplいます。以下のコードはCreatedDate、ユーザーがレビュー コメントを送信し、パラメーターとして関数に渡すときに保存するデータベースから取得される場所です。

this.posted(Ext.Date.parse(values.CreatedDate, "Y-m-d g:i:s"))

 posted: timeAgoInWords

そして、現在の日付と時刻をデータベースに保存する方法は次のとおりです。

 Ext.Date.patterns = { ISO8601Long: "Y-m-d H:i:s" };
    var date = new Date();
    var now = Ext.Date.format(date, Ext.Date.patterns['ISO8601Long'])
4

1 に答える 1

1

タイムゾーンの問題です。米国は IST より遅れているため、エポックからの秒単位の日付は過去の日付を示しています。入力した日付はまだ米国で発生する必要があるため、この差はマイナスになります。時間の差を見つけるための計算を行う前に、すべての時間を UTC に変更することをお勧めします。独自のサーバーで差を計算することもできます。

于 2012-07-17T06:36:29.917 に答える