我有一些代码可以检查用户是否在星期一到星期五的特定时间(上午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")) )))
}
脚本?
答案 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);
}