技术科普
浏览器时区检测:如何知道用户在哪
Web 应用常需要知道用户所在时区,以正确显示时间。浏览器提供了几种检测方式,但都有局限。
Intl.DateTimeFormat
最可靠的方式是:
Intl.DateTimeFormat().resolvedOptions().timeZone
它返回 IANA 时区名称,如 Asia/Shanghai。现代浏览器普遍支持。
Date.getTimezoneOffset
new Date().getTimezoneOffset() 返回本地时间与 UTC 的分钟差。它只能得到当前偏移,无法区分夏令时规则,也不能直接得到时区名称。
局限
- 时区由设备设置决定,不一定反映用户真实位置
- 用户可能手动设置错误时区
- VPN 和代理不影响浏览器时区
- 隐私模式或旧浏览器可能限制 API
产品建议
自动检测时区后,应在界面上显示并允许用户修改。对于会议、航班等关键时间,明确标注时区名称和偏移,避免歧义。
服务端配合
前端检测的时区可随请求发送,但服务端不应完全信任。用户账户中保存偏好时区,比每次依赖浏览器更稳定。
浏览器时区检测是便利工具,而非精确定位手段。设计时应把“可修改”作为默认假设。