簡體   English   中英

Javascript - 將知道其時區的日期時間轉換為 UTC

[英]Javascript - Convert a datetime, knowing its time zone, to UTC

我必須根據時區、年、月、日、小時和分鍾將日期時間轉換為 ISO 字符串。

例如,給定以下參數:

{
 timeZone: 'Europe/Paris',
 year: 2020,
 month: 11,
 day: 18,
 hours: 14,
 minutes: 44,
}

我想構建對應的 ISO 字符串: 2020-11-18T13:44:00.000Z (注意那里的小時班次)

您可以使用Intl.DateTimeFormattoLocaleDateString / toLocaleTimeString方法很容易地以相反的方式執行此操作,但是這樣我找不到合適的解決方案...如果我忽略了任何信息來源,請告訴我.

編輯(見評論):

使用時區而不是 GMT 字符串(例如'GMT +01:00' )的好處是我不必處理時間更改。 您可能知道, 'Europe/Paris'時區在冬天是'GMT +01:00' ,而在夏天是'GMT +022:00' ......我找不到合適的方法來映射時區到任何 UTC 偏移量

預先感謝您的幫助

解決方案

如下所示,使用 Luxon 我們可以做到

const timeObject = { day, month, year, hours, minutes, zone: timeZone };
const date = DateTime.fromObject(timeObject).toUTC().toString();

Matt 還提出了目前實驗性的Temporal功能。

使用Luxon (Moment 的繼任者)。

 // your input object const o = { timeZone: 'Europe/Paris', year: 2020, month: 11, day: 18, hours: 14, minutes: 44, }; // create a Luxon DateTime const dt = luxon.DateTime.fromObject({ year: o.year, month: o.month, day: o.day, hour: o.hours, minute: o.minutes, zone: o.timeZone }); // convert to UTC and format as ISO const s = dt.toUTC().toString(); console.log(s);
 <script src="https://cdnjs.cloudflare.com/ajax/libs/luxon/1.25.0/luxon.min.js"></script>

當然,如果您的輸入對象使用與 Luxon 需要的相同的字段名稱,您可以簡化。

Temporal在您的瀏覽器引擎中可用時(或者如果您使用polyfill ),那么只需執行以下操作:

Temporal.ZonedDateTime.from({
  timeZone: 'Europe/Paris',
  year: 2020,
  month: 11,
  day: 18,
  hour: 14,
  minute: 44,
}).toInstant().toString();
// => '2020-11-18T13:44:00Z'

這是我的答案:

    var year = 2020;
    var month = 11;
    var day = 18;
    var hours = 14;
    var minutes = 44;
    var string = years + month + day + hours + minutes;

如果要在輸出中顯示字符串:

    var year = 2020;
    var month = 11;
    var day = 18;
    var hours = 14;
    var minutes = 44;
    var string = years + month + day + hours + minutes;
    document.getElementById("demo").innerHTML = "time in string" + 
    string

暫無
暫無

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

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