我有一个用户输入,用户输入年,月和日,我创建了一个日期对象
let userDate = new Date(year, month, day)
然后从用户输入,用户输入分钟和小时(变量分钟和小时)
我需要将此日期和时间转换为UTC时间戳,使用时刻,我不确定。我可以做吗
let utcTimestamp = moment.utc(date.toISOString()).hour(hours).minutes(minutes);
例如:如果用户输入的日期为13-Mar-2018,时间为8:45 AM(GMT时区),那么我可以使用上面的代码行来获取UTC时间戳,因为我可以直接添加小时和分钟到日期
如果用户输入的日期为2018年8月13日和时间8:45(由于夏令时变化而是GMT +1),那么在上面的行中我可能会创建错误的日期。
答案 0 :(得分:2)
...我创建了一个日期对象
let userDate = new Date(year, month, day)
这里要小心,你需要从月份中减去1,因为Date
而不是通常的1-12编号为0-11。
然后从用户输入,用户输入分钟和小时(变量分钟和小时)
我需要将此日期和时间转换为UTC时间戳,使用时刻......
你不需要Moment。只需在.toISOString()
对象上调用Date
即可。它在生成字符串之前隐式转换为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(由于夏令时变化而是GMT +1),那么在上面的行中我可能会创建错误的日期。< / p>
从本地时间到UTC的转换将自动考虑本地时区正在观察的任何夏令时调整。您无需自行进行任何其他调整。
答案 1 :(得分:0)
这是我用来将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);