簡體   English   中英

通過JavaScript中的字符串檢測夏時制時區

[英]Daylight Savings Timezone Detection From Strings In JavaScript

我到過幾個地方看過,但是找不到這個問題的解決方案。 我有一些要導入的數據,對於我來說,它包含表示東部時區 (ET)中日期的字符串。 字符串如下所示:

七月28,2018 03:39下午

如果嘗試使用JavaScript創建新的日期對象,則可以創建新的日期對象,但問題是沒有ET時區,因此可以使用EST (東部標准時間)或EDT (東部夏令時間)創建它)。

console.log(new Date('July 28, 2018 03:39 PM EST'));
2018-07-28T19:39:00.000Z

要么

console.log(new Date('July 28, 2018 03:39 PM EDT'));
2018-07-28T20:39:00.000Z

我們可以清楚地看到兩者之間相差一小時。 確定是否啟用夏令時的規則似乎很復雜,並且可能因地理區域而異。

所以我的問題是:是否有解決方案可以根據某些參數檢測適用的時區(日光或標准時間)? 我假設至少需要年,月,日,時間和標准時區?

由於JavaScript將所有日期都存儲在UTC中,因此我無法找到任何解決方案。 除非找到要解析的字符串的標准/夏時制,否則無法可靠地創建日期對象。

我可以很容易地在東部時間解決它,但是,我確定有更好的解決方案可以解決所有時區嗎?

我要尋找的解決方案類型看起來像這樣:

let dateString = 'July 28, 2018 03:39 PM'
let timeZone = getStandardOrDaylightSavingsTZ(dateString, 'EST');
// "timeZone" would be set back to EDT right now because it's daylight savings
console.log(new Date(dateString + ' ' + timeZone));
2018-07-28T20:39:00.000Z

您可以嘗試一下moment-timezone 考慮到時區規則的復雜性,幾乎可以肯定圖書館是有序的。

在下面的示例中,假設每個日期字符串都來自同一台服務器,我們知道該日期設置為ET。 我們在構造函數中設置時區,並給出解析后的日期在日歷上的位置以及該語言環境的時區規則,它將返回正確的時間。

輸出為ISO進行驗證。

var moment = require('moment-timezone');

var dates = [
    'March 10, 2018 03:39 PM',
    'March 11, 2018 03:39 PM',
];

for (let d of dates) {
    iso = moment.tz(d, "MMMM DD, YYYY hh:mm A", "America/Toronto").toISOString();
    console.log(iso);
}

// Daylight saving time began at 3:00 a.m. on Sunday, March 11
// 2018-03-10T20:39:00.000Z
// 2018-03-11T19:39:00.000Z

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM