从开始dateTime(ISO格式)和持续时间(hh:mm格式)计算结束dateTime(ISO格式)

时间:2019-05-18 06:33:05

标签: javascript momentjs

让我们

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

请注意时区。提前致谢!!

2 个答案:

答案 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);