[英]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.