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

如何将日期时间转换为UTC+;1在JavaScript中,javascript,datetime,Javascript,Datetime,我们已经在node red中创建了一个函数,其中我们清理了从传感器元数据接收的日期时间。不幸的是,获取的时区落后一小时,因此发送了“错误的日期时间”。我们需要将此日期时间转换为UTC+1(“欧洲/柏林”)。该函数是用JavaScript编写的,据我所知,我们不能使用第三方库,如矩等 希望这里有人能帮助我们。提前谢谢 这就是我们迄今为止所做的: var time = msg.metadata.time; var datetime = new Date().toLocaleString(); va

我们已经在node red中创建了一个函数,其中我们清理了从传感器元数据接收的日期时间。不幸的是,获取的时区落后一小时,因此发送了“错误的日期时间”。我们需要将此日期时间转换为UTC+1(“欧洲/柏林”)。该函数是用JavaScript编写的,据我所知,我们不能使用第三方库,如矩等

希望这里有人能帮助我们。提前谢谢

这就是我们迄今为止所做的:

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+'-'+d
var time = h + ":" + min + ":" + s;

var timeDate = date+' '+time;
<>我会考虑使用日期/时间转换。 现在,如果您可以使用它,Moment.js会更好,但是您可以像下面这样转换时间

<>请记住,你必须考虑DST的变化,这很难解释使用你自己的代码(确切的日期DST切换每年变化)。 例如,柏林在10月下旬至3月下旬使用CET(UTC+1),在3月下旬至10月下旬使用CEST(UTC+2)

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

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

IANA时区列表如下:

const time=1559347200000;//2019-06-01T00:00:00Z
log(“UTC时间1:,新日期(时间).toISOString());
console.log(“柏林时间1(ISO):”,新日期(时间).tolocalString(“sv”,{时区:“欧洲/柏林”}));
console.log(“柏林时间1(de):”,新日期(时间).tolocalString(“de”,{时区:“欧洲/柏林”}));
常数时间2=157515840000;//2019-12-01T00:00:00Z
log(“UTC时间2:”,新日期(time2.toISOString());
console.log(“柏林时间2(ISO):”,新日期(时间2).tolocalString(“sv”,{时区:“欧洲/柏林”}));
console.log(“柏林时间2(de):”,新日期(time2).tolocalString(“de”,{时区:“欧洲/柏林”}));
//还可以使用足够简单的函数获取UTC偏移:
//同样,这将考虑DST
函数getUTCOffsetMinutes(unixDate,tz){
const localTimeISO=new Date(unixDate).tolocalString(“sv”{timeZone:tz}).replace(“,“T”)+“Z”;
return(新日期(localTimeISO).getTime()-unixDate)/60000;//毫秒到分钟。
}
console.log(“UTC偏移分钟数(6月/柏林):”,getUTCOffsetMinutes(时间,“欧洲/柏林”);
console.log(“UTC偏移分钟数(六月/洛杉矶):”,getUTCOffsetMinutes(时间,“美国/洛杉矶”);
console.log(“UTC偏移分钟数(6月/悉尼):”,getUTCOffsetMinutes(时间,“澳大利亚/悉尼”);
console.log(“UTC偏移分钟数(12月/柏林):”,getUTCOffsetMinutes(time2,“欧洲/柏林”);
console.log(“UTC偏移分钟数(12月/LA):”,getUTCOffsetMinutes(time2,“美国/洛杉矶”);
console.log(“UTC偏移分钟数(12月/悉尼):”,getUTCOffsetMinutes(time2,“澳大利亚/悉尼”) 我会考虑使用日期/时间转换。
现在,如果您可以使用它,Moment.js会更好,但是您可以像下面这样转换时间

<>请记住,你必须考虑DST的变化,这很难解释使用你自己的代码(确切的日期DST切换每年变化)。 例如,柏林在10月下旬至3月下旬使用CET(UTC+1),在3月下旬至10月下旬使用CEST(UTC+2)

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

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

IANA时区列表如下:

const time=1559347200000;//2019-06-01T00:00:00Z
log(“UTC时间1:,新日期(时间).toISOString());
console.log(“柏林时间1(ISO):”,新日期(时间).tolocalString(“sv”,{时区:“欧洲/柏林”}));
console.log(“柏林时间1(de):”,新日期(时间).tolocalString(“de”,{时区:“欧洲/柏林”}));
常数时间2=157515840000;//2019-12-01T00:00:00Z
log(“UTC时间2:”,新日期(time2.toISOString());
console.log(“柏林时间2(ISO):”,新日期(时间2).tolocalString(“sv”,{时区:“欧洲/柏林”}));
console.log(“柏林时间2(de):”,新日期(time2).tolocalString(“de”,{时区:“欧洲/柏林”}));
//还可以使用足够简单的函数获取UTC偏移:
//同样,这将考虑DST
函数getUTCOffsetMinutes(unixDate,tz){
const localTimeISO=new Date(unixDate).tolocalString(“sv”{timeZone:tz}).replace(“,“T”)+“Z”;
return(新日期(localTimeISO).getTime()-unixDate)/60000;//毫秒到分钟。
}
console.log(“UTC偏移分钟数(6月/柏林):”,getUTCOffsetMinutes(时间,“欧洲/柏林”);
console.log(“UTC偏移分钟数(六月/洛杉矶):”,getUTCOffsetMinutes(时间,“美国/洛杉矶”);
console.log(“UTC偏移分钟数(6月/悉尼):”,getUTCOffsetMinutes(时间,“澳大利亚/悉尼”);
console.log(“UTC偏移分钟数(12月/柏林):”,getUTCOffsetMinutes(time2,“欧洲/柏林”);
console.log(“UTC偏移分钟数(12月/LA):”,getUTCOffsetMinutes(time2,“美国/洛杉矶”);

console.log(“UTC偏移分钟数(12月/悉尼):”,getUTCOffsetMinutes(time2,“澳大利亚/悉尼”)我使用我制作的这个函数,我想它可能会帮助您:

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))

我使用我制作的这个功能,我想它可能会帮助你:

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))

那么,你得到了一个日期字符串,它是一小时前的?只需创建一个日期对象(新日期)和一个小时到它
var timedate=新日期(时间);timedate.setHours(timedate.getHours()+1)
-完成,添加1小时-不要担心“溢出”-javascript为您处理它们谢谢!这起作用了。尽管如此,我不得不将timeDate更改为timeDate。将在我的问题处将代码行上载到代码段。顺便说一句,我不知道如何让你的答案成为最后的答案。我认为你应得的:-谢谢你的帮助!请记住夏季(或4月至10月)的DST