I recently migrated to Librewolf from Firefox due to Mozilla’s recent blunder of covertly adding adware to their browser.
I like the ResistFingerprinting feature for added privacy, but enabling it seems to set my browser time to GMT instead of ET, with most times on webpages (which refer to browser time) ahead by several hours as a result.
Can I define my desired timezone in the browser settings so I don’t have to pick one or the other between a correct browser time and better privacy? TIA :D!
Yes, of course. You will have to adapt it to your time zone, as the German time zone is currently hardcoded. If I had known back then that I would be sharing this at some point, I would have tried harder. 😅
// ==UserScript== // @name Spoof Timezone // @namespace http://tampermonkey.net/ // @version 0.1 // @license GPL-3.0 // @description Overwrites the Date object to use the German time zone // @author dvb // @match *://*.foo.com/* // @match *://*.bar.com/* // @match *://*.foobar.com/* // @match https://webbrowsertools.com/timezone/ // @grant none // @run-at document-start // ==/UserScript== (function() { 'use strict'; const originalDate = Date; function isSummerTime(now) { const month = now.getMonth() + 1; // January is 0, so +1 const day = now.getDate(); const hour = now.getHours(); if (month > 3 && month < 10) { // Summer time is from April to September return true; } else if (month === 3 && day >= 29 && hour >= 2) { // Last Sunday in March at 2 o'clock return true; } else if (month === 10 && day <= 25 && hour < 3) { // Last Sunday in October at 3 o'clock return true; } return false; } function getGermanDate(...args) { const now = new originalDate(...args); const germanTimeZoneOffset = isSummerTime(now) ? -120 : -60; // German time zone is UTC+1 (+2 during summer time) if (args.length === 0) { return new originalDate(now.getTime() + (now.getTimezoneOffset() - germanTimeZoneOffset) * 60000); } else { return now; } } // Overwrite the newDate function const newDate = function(...args) { return getGermanDate(...args); }; // Copy the prototypes and static methods Object.setPrototypeOf(newDate, originalDate); Object.setPrototypeOf(newDate.prototype, originalDate.prototype); for (const prop of Object.getOwnPropertyNames(originalDate)) { if (typeof originalDate[prop] === 'function') { newDate[prop] = originalDate[prop].bind(originalDate); } else { Object.defineProperty(newDate, prop, Object.getOwnPropertyDescriptor(originalDate, prop)); } } // Overwrite Date objects Date = newDate; window.Date = newDate; })();
This is super rad