1

システムクロックを変更せずに JavaScript の Date オブジェクトによって返されるものを変更するブラウザ拡張機能はありますか?

これは、パンフレット ウェアを作成しているときによく出てくるものです。現在の日付に基づいて、訪問者に特定のプロモーションやクリエイティブな扱いを表示したいことがよくあります。訪問者のシステム クロックを使用している場合、自分のシステム クロックを変更する必要があるため、テストが面倒になります。もちろん、カレンダーのリマインダーが台無しになり、他に何があるかはわかりません。

4

2 に答える 2

2

本番環境ではお勧めできませんが、開発環境では次のことができます。

var dateYouWant = 1363798981693; 
Date.prototype.getTime = function() { 
    return dateYouWant;
};
console.log( (new Date).getTime() );

基本的に、Date()指定した時間を返すように関数をオーバーライドします。

于 2013-03-20T17:07:39.903 に答える
0

私のコメントに、フォールバックとしてラッパー関数を呼び出すと答えたので、その関数を提供させてください。私はネイティブ オブジェクトを変更するのが嫌いなので、次のルートに進みます。

これは、遊ぶためのjsfiddleです。

function getScaledDate(offset){
    // if you don't pass in an offset
    if (offset === undefined) {
        // check to see if there is a global one defined
        if (typeof GLOBAL_DATE_OFFSET !== "undefined") {
            offset = GLOBAL_DATE_OFFSET;
        }
        // otherwise, don't add an offset
        else {
            offset = 0;
        }
    }

    return new Date(+new Date + offset);
}

// USAGE:
var now = getScaledDate();
var oneHourFromNow = getScaledDate(1000 * 60 * 60); 
var oneHourAgo = getScaledDate(-1000 * 60 * 60); 

// GLOBAL OFFSET USAGE:
window.GLOBAL_DATE_OFFSET = 1000 * 60 * 60 * 7; // scale everything 7 hours foward
var scaledDate = getScaledDate(); // will use global offset
于 2013-03-20T23:09:24.013 に答える