我有一个Node.js服务器,它根据时区触发功能。具体来说,我正在使用moment-timezone,并且在固定的日期和时间输入中,我需要在同一输入但在不同时区触发操作。
因此,如果我在我的服务器中设置该操作应该在英国时间下午1:00触发并且用户在纽约,我希望该操作在纽约的下午1:00触发。
这就是我现在正在做的事情:
exports.time_to_trigger = function(hour, date) {
var user_timezone = "Asia/Tokyo";
// create date object from date + hour strings
var dateObj = moment(date + hour, process.env.DATE_FORMAT + " HH:mm a");
// create offset
var max_value = moment(dateObj).add(3, 'minutes');
var low_value = moment(dateObj).add(-3, 'minutes');
console.log(max_value); // -> moment("2018-01-25T13:03:00.000")
console.log(low_value); // -> moment("2018-01-25T12:57:00.000")
// get the now value of the user timezone
var user_now = moment.tz(moment(), user_timezone);
console.log(user_now); // -> moment.parseZone("2018-01-24T13:01:00.038+09:00")
console.log(user_now.isAfter(low_value)); // -> false
console.log(user_now.isBefore(max_value)); // -> true
return (
user_now.isAfter(low_value) &&
user_now.isBefore(max_value)
)
}
从评论中可以看出,这与isAfter和isBefore的比较不起作用,考虑到我故意转换的时区没有这个问题。我该如何解决这个问题?
答案 0 :(得分:0)
您的问题是您使用时区获取result
但不创建user_now
。所以dateObj
缺少时区偏移量,而且您的2个日期与您希望的不相符。
让所有日期都在同一时区:
dateObj