14

Web サイトでロケーション機能をテストしたいのですが、このテストを行うには、さまざまなタイムゾーンを試す必要があります。次の関数を呼び出して、javascript コードでタイムゾーンを取得します。

var offset = new Date().getTimezoneOffset();

私はアルゼンチンにいるので、この関数は 180 を返します。異なるタイムゾーンでテストする必要があります。誰かがこれを行う方法を知っていますか? どうもありがとう!!

4

2 に答える 2

34

受け入れられた答えは、メソッドを実際にモックするDate.getTimezoneOffsetものではなく、同じ名前の別のメソッドを使用することを期待しています。

Date オブジェクト自体では機能せず、Carl Meyer が指摘するように、MomentJS などのライブラリでは機能しません。

より良い方法は、プロトタイプのgetTimezoneOffsetメソッドをオーバーライドして、 のすべてのインスタンスがオーバーライドされたメソッドを持つようにすることです。DateDate

d = new Date(); // Mon Jul 13 2015 10:58:12 GMT+0200 (CEST)
alert(d.getTimezoneOffset()); // -120, My local "real" timezone.

// Save the original method.
var getTimezoneOffset = Date.prototype.getTimezoneOffset;

Date.prototype.getTimezoneOffset = function () {
    return 160;
}
// Now Date objects will have the mocked timezone offset
alert(d.getTimezoneOffset()); // 160, The mocked timezone.

// Now restore the method to its original version
Date.prototype.getTimezoneOffset = getTimezoneOffset;
alert(d.getTimezoneOffset()); // -120
于 2015-07-13T09:03:13.560 に答える
-8

これには関数を使用できます。

function getTimezoneOffset() {
  if (DEBUG) {
    return 600; // for Australian Eastern Standard Time
  }

  return new Date().getTimezoneOffset();
}

DEBUGテストを行っているかどうかを判断するために以前に設定された変数はどこにありますか。

次に、Date オブジェクトのメソッドではなく、コード全体でその関数を使用します。

于 2012-08-31T18:26:57.173 に答える