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 功能。

这是我的回答:

    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

使用 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 需要的相同的字段名称,您可以简化。