gpt4 book ai didi

javascript - 如何可靠地确定时区

转载 作者:行者123 更新时间:2023-11-28 09:20:58 25 4
gpt4 key购买 nike

我需要在 JavaScript 中可靠地确定用户的时区。大多数用户群将使用低带宽和旧浏览器,因此我必须保持向后兼容性并将数据传输保持在最低限度。理想情况下,我只想在 session 开始时获取用户的时区(我使用 CAS 进行登录,因此没有登录页面),然后将其发送回服务器,我将能够将其存储在数据库中。我查看了 jsTimezoneDetect 库以及各种地理定位 API(通过用户的 IP 检索位置/时区),但每个都有其缺点:

  1. jsTimezoneDetect 并不大,但我不想在我的所有页面上包含 5K 额外的 JS 代码(没有单个登录页面!)
  2. 地理位置 API(例如 IPInfoDB)引入了对外部服务的依赖,速度可能很慢,并且并不总能保证结果

可靠且高效地确定用户时区并将其发送回我的 JSF 应用程序同时使用最小带宽和浏览器资源的最简单方法是什么?

最佳答案

阅读完评论后,我得到了以下代码:

<h:panelGroup layout="block" rendered="#{!applicationBean.timeZoneSet}">
<h:outputScript name="timezone.js" library="js"></h:outputScript>
<h:form style="display:none;">
<p:inputText value="#{applicationBean.currentTimeZone}" widgetVar="wTZ" style="display:none;"></p:inputText>
<p:remoteCommand autoRun="true" name="setTZ" onstart="var tzone=jstz.determine();wTZ.getJQ().val(tzone.name())" process="@form"></p:remoteCommand>
</h:form>
</h:panelGroup>

支持 bean:

public boolean isTimeZoneSet() {
return getELValue(EL_TIMEZONE_FLAG, Boolean.class);
}

public void setTimeZoneSet(boolean val) {
setELValue(EL_TIMEZONE_FLAG, val);
}

@Transactional(propagation=Propagation.REQUIRES_NEW)
public void setCurrentTimeZone(String val) {
User _user = getCurrentUser();
_user.setTimeZone(val);
_usersDAO.merge(_user);
setTimeZoneSet(true);
}

@Transactional(propagation=Propagation.REQUIRES_NEW)
public String getCurrentTimeZone() {
User _user = getCurrentUser();
return _user.getTimeZone();
}

其中 EL_TIMEZONE_FLAG 是 session 范围的 EL 表达式。上述方法确保我在 User 上设置了时区,每个 session 仅执行一次,并且每个 session 仅加载任何其他 JS 代码一次

关于javascript - 如何可靠地确定时区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14963728/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com