繁体   English   中英

将当地时间转换为UTC并添加至UTC日期时间

[英]convert local time to utc and add to utc datetime moment

我有一个用户输入,其中用户输入年,月和日,然后创建一个日期对象

  let userDate = new Date(year, month, day)

然后从用户输入中,用户在其中输入分钟和小时(输入变量分钟和小时)

我需要使用一下时间将此日期和时间转换为UTC时间戳,但我不确定。 我可以做

  let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);

例如:如果用户输入的日期为2018年3月13日,时间为8:45 AM(以GMT时区表示),则我可以使用上面的代码行获取UTC时间戳,因为我可以直接将小时和分钟添加到日期

如果用户输入日期为2018年8月13日和时间8:45(由于夏令时更改,则为格林尼治标准时间+1),则上面的行可能创建了错误的日期。

...我创建一个日期对象

 let userDate = new Date(year, month, day) 

这里要小心,您需要从月份中减去1,因为它们用Date编号为0-11而不是通常的1-12。

然后从用户输入中,用户在其中输入分钟和小时(输入变量分钟和小时)

我需要使用时间将这个日期和时间转换为UTC时间戳...

您不需要为此。 只需在Date对象上调用.toISOString() 在生成字符串之前,它隐式转换为UTC。

var utcString = new Date(year, month-1, day, hours, minutes).toISOString();

...我能做吗

 let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes); 

不,那没有道理。 只有在本地时间中输入日期而在UTC中输入时间后,这才起作用。 这种行为上的差异肯定会使您的用户感到困惑-特别是在UTC日期与本地日期不同的情况下。

...如果用户输入的日期为2018年8月13日,时间为8:45(由于夏令时更改,则为格林尼治标准时间+1),则上述行可能会创建错误的日期。

从本地时间到UTC的转换将自动考虑本地时区正在观察的任何夏令时调整。 您不需要自己进行任何其他调整。

这是我用来将Outlook日历事件从UTC转换为本地时间的代码段。 相同的技术可以用于其他方案。

//Get the users timezone
let timeZone = item.originalStartTimeZone;

//Get the start datetime in UTC time
let timeStart = item.start.dateTime;

//Calculate the negative offset. 
let offset = - timeStart.localeCompare(timeZone);

//Add the calculated offset to the UTC start time 
let localStartTime = addHours(timeStart, offset);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM