You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用JS或jQuery获取time.windows.com时间服务器的实时时间?

嘿,这个问题问得挺实在的!作为编程新手,能想到用网页获取官方时间服务器的时间,思路很不错~不过直接用前端JS/jQuery是没法实现的,我来给你讲清楚原因,再给你可行的解决方案:

为什么前端无法直接获取time.windows.com的时间

主要有两个核心限制:

  • 浏览器安全+协议限制:浏览器出于安全考虑,不允许前端JS发起跨域的非HTTP/HTTPS请求。而time.windows.com是NTP(网络时间协议)服务器,用的是UDP 123端口,不是HTTP协议,前端根本没法直接调用这个服务。
  • NTP数据解析难度:NTP返回的是二进制格式的数据包,前端JS没有原生API去解析这种数据,就算能拿到返回内容,也没法转换成可读的时间。
可行的解决方案:后端代理

核心思路是:用后端代码(比如Node.js、Python等)去请求NTP服务器获取时间,然后前端通过HTTP请求从后端拿到这个时间,再实现实时更新。

示例:Node.js后端 + 前端JS实现

第一步:写后端接口

我们用Node.js+Express框架,配合ntp-client包来获取NTP时间:

const express = require('express');
const ntpClient = require('ntp-client');
const app = express();
const port = 3000;

// 允许前端跨域请求(开发环境用,生产环境要改成你的前端域名)
app.use((req, res, next) => {
  res.header('Access-Control-Allow-Origin', '*');
  next();
});

// 定义获取NTP时间的接口
app.get('/get-ntp-time', (req, res) => {
  ntpClient.getNetworkTime('time.windows.com', 123, (err, date) => {
    if (err) {
      console.error('获取NTP时间失败:', err);
      return res.status(500).json({ error: '获取时间失败' });
    }
    // 返回时间戳,前端自己转成日期格式
    res.json({ timestamp: date.getTime() });
  });
});

app.listen(port, () => {
  console.log(`后端服务运行在 http://localhost:${port}`);
});

安装依赖:打开终端,运行npm install express ntp-client,然后启动服务node server.js。

第二步:前端实时更新时间

原生JS版本

<div id="ntp-time">正在加载时间...</div>

<script>
function updateNtpTime() {
  fetch('http://localhost:3000/get-ntp-time')
    .then(response => response.json())
    .then(data => {
      const ntpDate = new Date(data.timestamp);
      // 格式化时间为中文常用格式
      const formattedTime = ntpDate.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit'
      });
      document.getElementById('ntp-time').textContent = formattedTime;
    })
    .catch(err => console.error('获取时间出错:', err));
}

// 页面加载时先获取一次,之后每秒更新
updateNtpTime();
setInterval(updateNtpTime, 1000);
</script>

jQuery版本

如果你习惯用jQuery,前端代码可以改成这样:

<div id="ntp-time">正在加载时间...</div>

<script src="https://code.jquery.com/jquery-3.6.0.min.js"></script>
<script>
function updateNtpTime() {
  $.get('http://localhost:3000/get-ntp-time')
    .done(function(data) {
      const ntpDate = new Date(data.timestamp);
      const formattedTime = ntpDate.toLocaleString('zh-CN', {
        year: 'numeric',
        month: '2-digit',
        day: '2-digit',
        hour: '2-digit',
        minute: '2-digit',
        second: '2-digit'
      });
      $('#ntp-time').text(formattedTime);
    })
    .fail(function(err) {
      console.error('获取时间出错:', err);
    });
}

updateNtpTime();
setInterval(updateNtpTime, 1000);
</script>

额外注意事项

  • 生产环境中,要把后端的Access-Control-Allow-Origin设置成你的前端域名(比如https://your-frontend.com),不要用*,避免安全风险。
  • 你也可以用其他后端语言实现,比如Python的ntplib库、PHP的ntp相关扩展,原理都是一样的:后端作为中间层请求NTP服务器,再把时间返回给前端。
  • 如果不想自己搭后端,也可以找第三方提供的NTP时间HTTP API,但要注意这类服务的稳定性和免费额度。

内容的提问来源于stack exchange,提问作者user8149677

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:22:58