async function getTimeZoneObject() { let timeZone = null; if(typeof bridge !== 'undefined' && bridge && bridge.localTimeZone && bridge.isServerUp) { let oldValue = bridge.noAlertOnError; try { if(await bridge.isServerUp()) { bridge.noAlertOnError = true; timeZone = await bridge.localTimeZone(); if(!timeZone.id || !timeZone.id.trim()) { console.warn("time zone info returned by bridge is empty"); alert("time zone info returned by bridge is empty"); } } } catch(ex) { console.error(ex); } finally { bridge.noAlertOnError = oldValue; } } if(!timeZone) { console.warn('The bridge is not installed. The Time Zone information might not be accurate!'); timeZone = { standardName: _getTimeZoneName(), id: _getTimeZoneName(), displayName: _getTimeZoneName(), daylightName: _getTimeZoneName(true), serializedString: _ => _getTimeZoneName() }; if(!timeZone.id || !timeZone.id.trim()) { console.warn("time zone info returned by _getTimeZoneName is empty"); alert("time zone info returned by _getTimeZoneName is empty"); } } const currentTimeZone = System.TimeZone.CurrentTimeZone = {}; Object.defineProperties(currentTimeZone, { 'StandardName': { get: function () { return timeZone.standardName; } }, 'Id': { get: function () { if(!timeZone.id || !timeZone.id.trim()) { console.warn("time zone info is empty"); alert("time zone info is empty"); } return timeZone.id; } }, 'DisplayName': { get: function () { return timeZone.displayName; } }, 'DaylightName': { get: function () { return timeZone.daylightName; } }, 'ToSerializedString': { get: function () { return timeZone.serializedString; } }, }); currentTimeZone.serialize = function () { return currentTimeZone.ToSerializedString; }; // in case the call is made to the 'TimeZoneInfo' class : System.TimeZoneInfo = {"Local": currentTimeZone}; function _getTimeZoneName(daylight) { //when the bridge is not installed try { //this should return the time-zone name in the US format that is compatible with .NET var dateParts = Intl.DateTimeFormat('en-US', { day: '2-digit', timeZoneName: 'long' }).formatToParts(new Date()) let tzn = dateParts.find(e => e.type == "timeZoneName"); if(tzn) { if(tzn.value.indexOf('Standard') !== -1 && daylight) return tzn.value.replace('Standard', 'Daylight'); if(tzn.value.indexOf('Daylight') !== -1 && !daylight) return tzn.value.replace('Daylight', 'Standard'); return tzn.value; } else return _getTimeZoneName_original(daylight); } catch(ex) { console.error(ex); return _getTimeZoneName_original(daylight); } } function _getTimeZoneName_original(daylight) { //toString return this kind of text: //Thu Feb 21 2019 09:45:33 GMT-0500 (Eastern Standard Time) //which contais the time zone name; extract it from here and try to use it //when the bridge is not installed let s = (new Date()).toString(); let idx1 = s.indexOf('('); let idx2 = s.indexOf(')'); if(idx1 !== -1 && idx2 !== -1) { let tzn = s.substring(idx1 + 1, idx2); if(tzn.indexOf('Standard') !== -1 && daylight) return tzn.replace('Standard', 'Daylight'); if(tzn.indexOf('Daylight') !== -1 && !daylight) return tzn.replace('Daylight', 'Standard'); return tzn; } else return "Unknown time zone"; } }; getTimeZoneObject();