簡體   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