技术科普

浏览器时区检测:如何知道用户在哪

Web 应用常需要知道用户所在时区,以正确显示时间。浏览器提供了几种检测方式,但都有局限。

Intl.DateTimeFormat

最可靠的方式是:

Intl.DateTimeFormat().resolvedOptions().timeZone

它返回 IANA 时区名称,如 Asia/Shanghai。现代浏览器普遍支持。

Date.getTimezoneOffset

new Date().getTimezoneOffset() 返回本地时间与 UTC 的分钟差。它只能得到当前偏移,无法区分夏令时规则,也不能直接得到时区名称。

局限

  • 时区由设备设置决定,不一定反映用户真实位置
  • 用户可能手动设置错误时区
  • VPN 和代理不影响浏览器时区
  • 隐私模式或旧浏览器可能限制 API

产品建议

自动检测时区后,应在界面上显示并允许用户修改。对于会议、航班等关键时间,明确标注时区名称和偏移,避免歧义。

服务端配合

前端检测的时区可随请求发送,但服务端不应完全信任。用户账户中保存偏好时区,比每次依赖浏览器更稳定。

浏览器时区检测是便利工具,而非精确定位手段。设计时应把“可修改”作为默认假设。