将时区设置为 GB 以供所有人查看

Set timezone to GB for everyone viewing

我有一些代码可以检查用户是否在周一至周五的特定时间(上午 9 点 - 下午 17 点 30 分)内。

function checkTime() {
    var d = new Date(); // current time
    var hours = d.getHours();
    var mins = d.getMinutes();
    var day = d.getDay();

    return day >= 1
           && day <= 5
           && hours >= 9 
           && (hours < 17 || hours === 17 && mins <= 30);
}

这工作正常,但它会根据用户的浏览器时间检查时间。

我想要做的是让它在英国时间上午 9 点到下午 17 点 30 分检查。

因此,如果您在上午 10 点 (UTC-7) 查看来自美国的 site/script,您将不在时间检查器的范围内,因为它是英国时间晚上 18 点 (UTC+1)。

所以我想我想做的是获取用户时区,然后将其转换为英国时间,然后 运行 我的 checkTime() 脚本?

正如 Rory 在评论中提到的,如果您的参考点是特定时区(在本例中为英国时间),那么您将需要逻辑来理解该时区的性质 - 特别是关于时区有夏令时转换,或对其时区偏移量进行其他更改。

英国当地时间在 GMT (UTC+00:00) 和 BST (UTC+01:00) 之间交替,目前遵循欧盟过渡规则(3 月的最后一个星期日至 10 月的最后一个星期日) , 都在 01:00 UTC).

您当然可以将这些规则硬编码到您自己的逻辑中,但您可能会发现代码过于复杂且难以维护。更好的方法是使用为此目的设计的库。 I list several of them here.

例如,使用 moment-timezone library, which is a companion library for the popular moment.js 库,您可以简单地这样做:

function checkTime() {

    // now in the UK
    var m = moment.tz("Europe/London");

    // use moment.js getters
    var hours = m.hour();
    var mins = m.minute();
    var day = m.day();

    // your original logic retained
    return day >= 1
           && day <= 5
           && hours >= 9 
           && (hours < 17 || hours === 17 && mins <= 30);
}