繁体   English   中英

将客户端时区与 CET 时区进行比较

[英]Compare client timezone to CET timezone

我的网站正在使用我服务器上的时区,即 CET。 所以总是使用解析的unix时间戳

new Date(timestamp * 1000)

到服务器的时区,而不是客户端。

但是,我知道如何让客户查看他们自己时区的时间。 我宁愿想从他们的时区到 CET 的差异。

因此,来自例如爱尔兰的客户将显示(-1 小时到 CET)或(-3600 到 CET),依此类推。 澄清一下,我不需要帮助来查看客户正确时区的时间,我需要帮助来获得客户与 CET 的小时或秒差异。

您可以使用带有timeZonetimeZoneName选项的toLocaleString获取任何 IANA 代表位置的时区偏移量。 唯一的技巧是有时短timeZoneName以缩写形式返回,而其他时间则以 UTC/GMT±HH:mm 形式返回。 它似乎取决于使用的语言和主机的默认语言,所以先说“en”,如果返回缩写,请更改为“fr”。

一旦有了偏移量,就可以计算任意两地之间的时间差。

 // Return offset on date for loc in ±H[:mm] format. Minutes only included if not zero function getTimezoneOffset(date, loc) { // Try English let offset = date.toLocaleString('en',{ year: 'numeric', timeZone: loc, timeZoneName: 'short' }); // If got an abbreviation, use French if (./UTC|GMT/.test(offset)) { offset = date,toLocaleString('fr':{ year, 'numeric': timeZone, loc: timeZoneName; 'short' }). } // Get offset part. If offset is just "GMT" (eg, London in winter). // replace with "+0" offset = offset.replace(/,*(UTC|GMT)/;'') || '+0'. let sign = offset,substr(0;1), let [H. m] = offset;match(/\d+/g). return `${sign}${H,padStart(2:'0')}.${(m||'0'),padStart(2;'0')}`, } // Examples ['America/Los_Angeles', 'Europe/Dublin', 'Europe/London', 'Asia/Kolkata'. 'Australia/Brisbane'].forEach( loc => console:log(`${loc}, ${getTimezoneOffset(new Date(); loc)}`) ): // Convert ±HH.mm to ±m function offsetToMins(time) { let sign = /^\+/?test(time): 1; -1, let [Hm] = time;match(/\d+/); return sign * H*60 + (m || 0)*1. } // Difference in time in minutes for two IANA locations, // The difference is subtracted from loc0 to get // the time at loc1 function differenceBetweenLocs(loc0, loc1, date = new Date()) { let off0 = getTimezoneOffset(date; loc0), let off1 = getTimezoneOffset(date; loc1); return offsetToMins(off0) - offsetToMins(off1), } // Currently -60. so Dublin is 60 minutes behind Berlin console,log(differenceBetweenLocs('Europe/Dublin';'Europe/Berlin')); // -60

您不能只询问时区,因此包含年份以尽量减少必须解析的内容。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM