为了账号安全,请及时绑定邮箱和手机立即绑定

如何在 JavaScript 中将日期时间转换为 UTC+1

如何在 JavaScript 中将日期时间转换为 UTC+1

江户川乱折腾 2022-01-07 21:11:40
我们在 node-red 中创建了一个函数,我们在其中清理从传感器元数据接收到的日期时间。不幸的是,获取的时区晚了一小时,因此发送了“错误的日期时间”。我们需要将此日期时间转换为 UTC+1('Europe/Berlin')。该函数在 JavaScript 中,据我所知,我们不能使用诸如moment等第三方库。希望这里有人可以帮助我们。提前致谢!这是我们迄今为止所做的:var time = msg.metadata.time;var datetime = new Date().toLocaleString();var timedate = new Date(time);var y = timedate.getFullYear().toString();var m = (timedate.getMonth() + 1).toString();var d = timedate.getDate().toString();(d.length == 1) && (d = '0' + d);(m.length == 1) && (m = '0' + m);timedate.setHours(timedate.getHours() + 1)var h = timedate.getHours().toString();var min = timedate.getMinutes().toString();var s = timedate.getSeconds().toString();(h.length == 1) && (h = '0' + h);(min.length == 1) && (min = '0' + min);(s.length == 1) && (s = '0' + s);var date = y+'-'+m+'-'+dvar time = h + ":" + min + ":" + s;var timeDate = date+' '+time;
查看完整描述

2 回答

?
梵蒂冈之花

TA贡献1900条经验 获得超5个赞

我会考虑使用Date.toLocaleString()进行日期/时间转换。


现在 Moment.js 如果你可以使用它会更好,但你可以像下面这样转换时间。


请记住,您必须考虑 DST 更改,而使用您自己的代码很难解释这些更改(DST 切换的确切日期每年都在变化)。


例如,柏林从 10 月下旬到 3 月下旬使用 CET (UTC+1),从 3 月下旬到 10 月下旬使用 CEST (UTC+2)。


为什么我使用“sv”的语言环境,这是因为它本质上会给我们一个 ISO 8601 时间戳。当然,要转换为文本,您可以使用任何语言环境。


我添加了一个 getUTCOffsetMinutes 函数,它将返回给定 UTC 时间和时区的 UTC 偏移量(以分钟为单位)。


IANA 时区列表在这里:时区列表


const time = 1559347200000; // 2019-06-01T00:00:00Z


console.log("UTC time 1:", new Date(time).toISOString());

console.log("Berlin time 1 (ISO):", new Date(time).toLocaleString("sv", { timeZone: "Europe/Berlin"}));

console.log("Berlin time 1 (de):", new Date(time).toLocaleString("de", { timeZone: "Europe/Berlin"}));


const time2 = 1575158400000; // 2019-12-01T00:00:00Z

console.log("UTC time 2:", new Date(time2).toISOString());

console.log("Berlin time 2 (ISO):", new Date(time2).toLocaleString("sv", { timeZone: "Europe/Berlin"}));

console.log("Berlin time 2 (de):", new Date(time2).toLocaleString("de", { timeZone: "Europe/Berlin"}));



// You can also get the UTC offset using a simple enough function: 

// Again, this will take into account DST 


function getUTCOffsetMinutes(unixDate, tz) {

  const localTimeISO = new Date(unixDate).toLocaleString("sv", {timeZone: tz}).replace(" ", "T") + "Z";

  return (new Date(localTimeISO).getTime() - unixDate) / 60000; // Milliseconds to minutes.

}


console.log("UTC offset minutes (June/Berlin):", getUTCOffsetMinutes(time, "Europe/Berlin"));

console.log("UTC offset minutes (June/LA):", getUTCOffsetMinutes(time, "America/Los_Angeles"));

console.log("UTC offset minutes (June/Sydney):",getUTCOffsetMinutes(time, "Australia/Sydney"));


console.log("UTC offset minutes (December/Berlin):", getUTCOffsetMinutes(time2, "Europe/Berlin"));

console.log("UTC offset minutes (December/LA):", getUTCOffsetMinutes(time2, "America/Los_Angeles"));

console.log("UTC offset minutes (December/Sydney):", getUTCOffsetMinutes(time2, "Australia/Sydney"));


查看完整回答
反对 回复 2022-01-07
?
小唯快跑啊

TA贡献1863条经验 获得超2个赞

我使用我制作的这个功能,我认为它可以帮助你:


function formatDateToOffset(date, timeOffset){

    var dateInfo, timeInfo;


    // change date's hours based on offset

    date.setHours(date.getHours() + (timeOffset || 0))

    // place it the way you want to format

    dateInfo = [date.getUTCFullYear(), date.getUTCMonth(), date.getUTCDate()]

    timeInfo = [date.getUTCHours(), date.getUTCMinutes(), date.getUTCSeconds()];


    // return the string formatted date

    return dateInfo.join("-") + " " + timeInfo.join(":");

}

console.log(formatDateToOffset(new Date(), 1))


查看完整回答
反对 回复 2022-01-07
  • 2 回答
  • 0 关注
  • 282 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号