[英]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.DateTimeFormat
或toLocaleDateString
/ 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 需要的相同的字段名稱,您可以簡化。
這是我的答案:
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.