timezone.js (1286B)
1 // |jit-test| tz-pacific; skip-if: typeof Intl === 'undefined' 2 3 let tzRE = /\(([^\)]+)\)/; 4 5 const SPOOFED_TZ_NAME = "Atlantic/Reykjavik"; 6 const SPOOFED_TZ_GENERIC = "Greenwich Mean Time"; 7 8 // Make sure we aren't already running with spoofed TZ 9 let original = new Date(0); 10 assertEq(tzRE.exec(original.toString())[1], "Pacific Standard Time"); 11 12 let originalDT = Intl.DateTimeFormat("en-US", { 13 dateStyle: "full", 14 timeStyle: "full", 15 }); 16 assertEq(originalDT.format(original).endsWith("Pacific Standard Time"), true); 17 assertEq(originalDT.resolvedOptions().timeZone, "America/Los_Angeles"); 18 19 let global = newGlobal({timeZone: SPOOFED_TZ_NAME}); 20 21 let date = new global.Date(); 22 assertEq(tzRE.exec(date.toString())[1], SPOOFED_TZ_GENERIC); 23 assertEq(tzRE.exec(date.toTimeString())[1], SPOOFED_TZ_GENERIC); 24 assertEq(date.getFullYear(), date.getUTCFullYear()); 25 assertEq(date.getMonth(), date.getUTCMonth()); 26 assertEq(date.getDate(), date.getUTCDate()); 27 assertEq(date.getDay(), date.getUTCDay()); 28 assertEq(date.getHours(),date.getUTCHours()); 29 assertEq(date.getTimezoneOffset(), 0); 30 31 let dt = global.Intl.DateTimeFormat("en-US", { 32 dateStyle: "full", 33 timeStyle: "full", 34 }); 35 assertEq(dt.format(date).endsWith(SPOOFED_TZ_GENERIC), true); 36 assertEq(dt.resolvedOptions().timeZone, SPOOFED_TZ_NAME);