在不知道机器时区的情况下比较时间

Compare time without knowing timezone of machine

此代码比较 2 个时间 - 当前时间和截止时间。

// Get current date/time
var now = new Date(); 

// Set up deadline date/time
var deadline = new Date(); //deadline is 1830hrs;
deadline.setHours(18);
deadline.setMinutes(30);

// Check if the current time is after the deadline
if( now > deadline ) {
    console.log('after deadline');
}
else {
    console.log('before deadline');
}

它适用于我的本地计算机,其中 nowdeadline 处于同一时区。如果服务器上的代码是 运行,其中 now 时区可能与要比较的 deadline 时区不同怎么办?如何处理 now 可以是任何时区并且 deadline 处于 Asia/HongKong 时区的情况?

编辑:创建 deadline 时有什么方法可以指定时区吗?我认为这是一个可能的解决方案。

截止日期和现在总是在同一个时区,因为你new Date()在那里。

当你在客户端的JS中创建时,不会有这种情况。因为这两个时间将从同一个客户端读取时间。

但是,如果在任何情况下任何时间来自位于另一个时区的服务器(当然是以字符串的形式)并且客户端位于另一个时区,那么这种情况就有可能发生。

现在您的方法是将两个日期都转换为特定时区(任何)。 然后进行比较。

您可以使用This库在JS中转换时区。
并寻求 This Thread.

的帮助

您缺少客户端所在时区的信息。这 部分 可以通过将其与所有时区的时间进行比较来解决。

在我的示例中,我将使用 moment.js,因为它是一个不错的库,具有许多仅用于时区的功能。

您可以使用 this code 找到匹配的时区,但有时它们对 DST 等有不同的规则,因此它们会在一年中转移。

不过,如果没问题,您现在可以使用 moment.js 指定截止日期的时区并计算您还剩多少时间。