为每个观看者设置时区为GB

时间:2016-06-21 08:55:25

标签: javascript jquery date timezone timezone-offset

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

checkTime()

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

我想做的是在英国时间上午9点至下午17点检查。

因此,如果您在上午10点(UTC-7)查看来自美国的网站/脚本,那么您将不在时间检查器中,因为它将是英国时间下午18.00(UTC + 1)。

所以我想我要做的是获取用户时区,然后将其转换为英国时间,然后运行我的status(mydata) status <- function (x) { x<- subset(x, x$RECORD_TYPE != "INPUT") x$c1<- as.character(x$c1) x$c2 <- as.factor(x$c2) x$c3 <- as.factor(x$c3) return ( data.frame(cbind( tapply(x$c2, x$c4, function (x) ifelse (!(any(x=="BAD")), "G", sum(x== "BAD"))) , tapply(x$c2D, x$c4, function (x) sum (x== "NEG")) ))) } 脚本?

1 个答案:

答案 0 :(得分:1)

正如Rory在评论中提到的,如果您的参考点是特定时区(在这种情况下是英国时间),那么您将需要逻辑来理解该时区的性质 - 特别是关于具有日光的时区保存时间转换或其他时区偏移的更改。

英国的当地时间在格林尼治标准时间(UTC + 00:00)和BST(UTC + 01:00)之间交替显示,目前遵循欧盟的过渡规则(3月的最后一个星期日到10月的最后一个星期日,两者都在01:00 UTC)。

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

例如,使用moment-timezone库,它是热门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);
}