Получение разницы во времени между часовыми поясами с моментом-часовым поясом - PullRequest
0 голосов
/ 04 октября 2018

Мне дана строка, представляющая время, и идентификатор часового пояса.Мне нужно определить, происходит ли рассматриваемое время в течение следующих получаса, но компьютер, на котором я работаю, находится в другом часовом поясе, чем тот, где была захвачена строка.Небольшое примечание: все в порядке (все еще происходит скоро === верно), если событие произошло в прошлом).Просто пытаюсь отличить вещи, которые произойдут более чем на полчаса в будущем, от остальных.

Кажется, это должно быть просто, но я ничего не могу с этим поделать.

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
}

Работает в часовом поясе "Америка / Лос-Анджелес".Моя «местная» предназначена для представления нью-йоркского времени.Итак, 16:39 - это входное значение для then, и я ожидаю, что сравнение будет примерно в это время (О, я запускаю это примерно в 13:20 по местному времени разработчика).Итак, в основном, в приведенном выше коде я хочу сравнить 16:39 с 16:20, большие яблоки с большими яблоками.Я не хочу взломать мой путь в это;Я хочу решение, которое я понимаю.Спасибо!

1 Ответ

0 голосов
/ 09 октября 2018

Это делает работу для меня:

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, он создает момент в этом времени и часовом поясе, а затем создает новый моменти переводит его в тот же часовой пояс, а затем переводит их.

...