如何用纯JavaScript从NTP服务器获取当前时间?
纯JS获取标准服务器时间的正确方案
你错在用HTTP请求去访问NTP协议服务器。NTP是基于UDP的协议,浏览器端JavaScript无法直接建立UDP连接,你访问https://time.cloudflare.com得到的是Cloudflare的时间服务宣传网页,自然是HTML内容,而非你需要的时间数据。
给你一个纯JS的可行方案:使用提供HTTP接口的标准时间服务,这类服务通过HTTP返回结构化的时间数据,浏览器可以正常解析。代码示例如下:
// 调用返回JSON格式的时间API fetch('https://worldtimeapi.org/api/ip') .then(res => res.json()) .then(data => { // 提取UTC时间并转换为本地时间 const utcTime = new Date(data.utc_datetime); const localTime = new Date(utcTime.getTime()); console.log('服务器UTC时间:', data.utc_datetime); console.log('转换后的本地时间:', localTime); }) .catch(err => { console.error('获取时间出错:', err); });
补充说明:
- 这类HTTP时间API返回的是标准服务器时间,完全不依赖本地系统时间,解决了你用
Date()方法的痛点 - 如果这个API不可用,也可以替换为其他同类HTTP时间服务,只要是通过HTTP返回文本/JSON格式时间的接口都适用
内容的提问来源于stack exchange,提问作者Maksiks
相关产品推荐
相关产品推荐

