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.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 功能。
这是我的回答:
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 需要的相同的字段名称,您可以简化。
我必须将日期时间(给定时区、年、月、日、小时和分钟)转换为 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 功能。
这是我的回答:
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 需要的相同的字段名称,您可以简化。