Получение разницы во времени по часовым поясам с моментом времени
Мне дают строку, представляющую время, и идентификатор часового пояса. Мне нужно определить, происходит ли рассматриваемое время в течение следующих получаса, но компьютер, на котором я работаю, находится в другом часовом поясе, чем тот, где была захвачена строка. Небольшое примечание: все в порядке (все еще происходит скоро === правда), если событие произошло в прошлом). Просто пытаюсь отличить вещи, которые случаются через полчаса от будущего.
Кажется, это должно быть просто, но я ничего не получу.
const moment = require('moment-timezone')
const hm = s => moment(s).format('HH:mm')
const happensSoon = (then, timezoneId) => {
console.log(`then:`, then) // 2018-10-04T16:39:52-07:00
console.log(`timezoneId:`, timezoneId) // America/New_York
const localNow = moment()
.clone()
.tz(timezoneId)
const localThen = moment(then)
.clone()
.tz(timezoneId)
const diff = localThen.diff(localNow, 'minutes')
console.log(`localThen:`, hm(localThen)) // 19:39
console.log(`localNow:`, hm(localNow)) // 16:24
console.log(`then:`, hm(then)) // 16:39
console.log(`diff:`, diff) // 194
return diff <= 30
}
Работает в часовом поясе "America/Los_Angeles". Моя "местная" предназначена для представления нью-йоркского времени. Итак, 16:39 является входным значением для then
и я ожидаю, что сравнение будет примерно в это время (о, я запускаю это примерно в 13:20 по местному времени разработчика). Итак, в основном, в приведенном выше коде я хочу сравнить 16:39 с 16:20, большие яблоки с большими яблоками. Я не хочу взломать мой путь в это; Я хочу решение, которое я понимаю. Спасибо!
1 ответ
Это делает работу для меня:
const happensSoon = (then, timezoneId) => {
const thenThere = moment.tz(then, timezoneId)
const nowThere = moment().tz(timezoneId)
const diff = thenThere.diff(nowThere, 'minutes')
return diff <= 30
}
Учитывая временную строку then
без информации о часовом поясе и timezoneId
, он создает момент в то время и часовой пояс, затем создает новый момент и переводит его в тот же часовой пояс, а затем рассеивает их.