比较不同时区的时间和moment.js

时间:2018-01-24 07:59:00

标签: javascript datetime momentjs

我有一个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的比较不起作用,考虑到我故意转换的时区没有这个问题。我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

您的问题是您使用时区获取result但不创建user_now。所以dateObj缺少时区偏移量,而且您的2个日期与您希望的不相符。

让所有日期都在同一时区:

dateObj