让我们
startDateTime => 2019-05-18T11:40:00-07:00
timeZone => -07:00
持续时间 => 23:10
durationHrs => 23
durationMin => 10
endDateTime => ?? (格式与startDateTime
相同)
到目前为止,我尝试如下:
const endMs = (+new Date(startDateTime)) + (((durationHrs)*60*60+(durationMin)*60)*1000);
const endDateTime = `${new Date(endMs).toISOString().split('.')[0]}${timeZone}`;
console.log(endDateTime);
请注意时区。提前致谢!!
答案 0 :(得分:0)
无法自动将UTC日期转换为某个随机时区。如果用户居住在该特定时区,它将起作用。无论如何,您可以使用简单的数学来解决此问题。
计算时间轴(以毫秒为单位)
const timeZone= `-07:00`
const timezoneDiff = timeZone[0]==='-' ? (timezone.split(':')[0]*60*60*1000 - timeZone.split(':')[1]*60*1000) : (timeZone.split(':')[0]*60*60*1000 + timeZone.split(':')[1]*60*1000)
将差异添加到标准UNIX时间戳
const endDateTime = `${new Date( endMs1+ (timeZoneDiff)).toISOString().split('.')[0]}${timeZone}`;
或者使用某些NPM模块,例如moment或moment-timezone
答案 1 :(得分:0)
我再次尝试,最终通过使用毫秒数来使用javascript和momentjs解决方案。
const st = '2019-05-18T11:40:00-07:00';
const tz = '-07:00'
const dur = '23:10';
const hr = 23;
const mn = 10;
const convert = (num) => num < 10 ? "0" + num : num;
const hrs = hr * 60 * 60 * 1000;
const mins = mn * 60 * 1000;
const getms = new Date(`${st.split('-')[0]}:00`).getTime();
const totalMs = getms + hrs + mins;
const year = new Date(totalMs).getFullYear();
const month = convert(new Date(totalMs).getMonth()+1);
const date = convert(new Date(totalMs).getDate());
const getHrs = convert(new Date(totalMs).getHours());
const getMin = convert(new Date(totalMs).getMinutes());
const getendTime = `${year}-${month}-${date} ${getHrs}:${getMin}:00`;
const momentend = moment.tz(getendTime, moment.tz.guess()).clone().tz(this.$data.selectedZone.split('$')[1]).format();
console.log(momentend);