Skip to content Skip to sidebar Skip to footer

How To Mock The Browser's Timezone?

I want to test a location feature in a web site, to make this test I need to try different time-zones. I obtain the timezone with a javascript code, calling the following function:

Solution 1:

The accepted answer doesn't really mock the Date.getTimezoneOffset method, instead it expects you to use a different method with the same name.

It won't work on Date objects themselves and as Carl Meyer points out, it won't work for libraries like MomentJS.

A better way is to override the getTimezoneOffset method on the Date prototype, so that all instances of Date have the overridden method.

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

Solution 2:

You could use a function for this.

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

  return new Date().getTimezoneOffset();
}

Where DEBUG is a variable set earlier on to determine whether you're testing or not.

Then use that function throughout your code, instead of the method on the Date object.


Post a Comment for "How To Mock The Browser's Timezone?"