为我提供了一个表示时间和时区ID的字符串。我需要确定所讨论的时间是否在接下来的半小时内发生,但是我正在运行的计算机所在的时区与捕获字符串的时区不同。小注释:没关系(如果该事件发生在过去,则仍然会发生(==== true))。只是试图将未来半个多小时内发生的事情与其他情况区分开来。
这似乎应该很简单,但是我却一无所获。
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”时区运行。我的“本地”旨在代表纽约时间。因此,then
的输入值为16:39,我希望比较时间约为该时间(哦,我在开发人员本地时间大约13:20运行此操作)。因此,基本上,在上面的代码中,我想将16:39与16:20(大苹果到大苹果)进行比较。我不想改变我的想法;我想要一个我理解的解决方案。谢谢!
答案 0 :(得分:0)
这为我完成了工作:
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
,它会在该时间和时区创建一个时刻,然后创建一个新时刻并将其转换为相同的时区,然后进行区分。