使用JS检查用户是否在EST时区和设置的EST时间范围内



我遇到一种情况,我试图提醒那些在东部时间上午12点到东部时间凌晨3点之间试图提交帖子的东部时间时区的用户。

伪代码:

var systemTimeZone = get current EST time ??
var currentUserTime = new Date();
If(currentUserTime > 12am EST && < 3am EST){
  // show alert modal
}

如果同时考虑到夏令时,我该如何实现这一目标呢。

使用moment.js和moment时区:

// get the current time in the user's local time zone
var nowLocal = moment();
// get the current time in the US Eastern time zone
var nowEastern = moment.tz("America/New_York");
// see if the time zone offsets match or not
if (nowLocal.utcOffset() != nowEastern.utcOffset())
{
    // see if it's before 3:00 AM in the Eastern time zone
    if (nowEastern.hour() < 3)  // note: checking hour >= 0 would be redundant
    {
        alert("It's too early in New York!")
    }
}

我强烈建议研究MomentJS之类的东西。在进行日期/时间比较和格式化时,需要做大量的工作。

利用这一时刻来做我认为你们正在努力实现的目标是:

var serverTimeUtc = /* Get from server a UTC time */
var momentTime = moment(serverTimeUtc);
if (momentTime.hour() >= 0 && momentTime.hour() < 3) {
    // Server event occurred between 12am and 3am local time
}

如果你只关心EST而不管当地时间,那么你就必须进行一些时区转换,moment.tz可以帮助你。

以下代码将根据格林威治标准时间提供当前日期的时区偏移:

var today = Date.now();
today = new Date(today);
var systemTimeZone = today.getTimezoneOffset();

您只需要计算EST的时区偏移范围:时区表

这个库会为您提供用户所在时区的名称。如果它不返回"America/NewYork",您就会知道用户不在东部时间。

http://pellepim.bitbucket.org/jstz/

最新更新