Рассчитать дату окончания (формат ISO) из даты начала (формат ISO) и продолжительности (формат чч: мм) - PullRequest
0 голосов
/ 18 мая 2019

Let,

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 голосов
/ 18 мая 2019

Я попробовал еще раз и, наконец, получил решение, используя 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);
0 голосов
/ 18 мая 2019

Невозможно автоматически преобразовать дату 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, такой как момент или момент-часовой пояс

...