当前位置: 首页 > article >正文

JavaScript 获取真实时间

JavaScript 获取真实时间

基本方法

1. Date 对象

最基本的获取时间方法是使用 Date 对象:

const now = new Date();
console.log(now.toString());  // 输出完整时间字符串
console.log(now.toLocaleString());  // 根据本地时间格式输出

2. 时间戳

获取毫秒级时间戳:

// 方法一
const timestamp1 = Date.now();

// 方法二
const timestamp2 = new Date().getTime();

// 方法三
const timestamp3 = +new Date();

高精度时间

1. Performance API

如果需要高精度计时,可以使用 Performance API:

const startTime = performance.now();
// 执行一些操作
const endTime = performance.now();
const duration = endTime - startTime;  // 精确到微秒级别

2. 服务器时间同步

为确保时间准确性,建议与服务器时间同步:

async function getServerTime() {
    try {
        const response = await fetch('/api/time');
        const serverTime = await response.json();
        return new Date(serverTime);
    } catch (error) {
        console.error('获取服务器时间失败:', error);
        return new Date();
    }
}

格式化时间

1. 使用 Intl.DateTimeFormat

const date = new Date();
const formatter = new Intl.DateTimeFormat('zh-CN', {
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
});
console.log(formatter.format(date));  // 2024-11-19 14:30:45

2. 自定义格式化函数

function formatDate(date) {
    const year = date.getFullYear();
    const month = String(date.getMonth() + 1).padStart(2, '0');
    const day = String(date.getDate()).padStart(2, '0');
    const hours = String(date.getHours()).padStart(2, '0');
    const minutes = String(date.getMinutes()).padStart(2, '0');
    const seconds = String(date.getSeconds()).padStart(2, '0');
    
    return `${year}-${month}-${day} ${hours}:${minutes}:${seconds}`;
}

最佳实践

  1. 时区处理
// 获取用户时区
const userTimeZone = Intl.DateTimeFormat().resolvedOptions().timeZone;

// 转换时间到特定时区
const date = new Date();
const options = {
    timeZone: 'Asia/Shanghai',
    hour12: false,
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
};
console.log(new Intl.DateTimeFormat('zh-CN', options).format(date));
  1. 性能考虑
// 缓存 DateTimeFormat 实例
const formatter = new Intl.DateTimeFormat('zh-CN', {
    hour12: false,
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit'
});

// 重复使用该实例
function getFormattedTime() {
    return formatter.format(new Date());
}

注意事项

  1. Date.now() 返回的是 UTC 时间戳,与本地时区无关
  2. new Date() 创建的是本地时间对象
  3. 服务器时间同步时需考虑网络延迟
  4. 处理时区时要特别注意夏令时的影响
  5. 高精度计时场景建议使用 Performance API

总结

在实际应用中,建议:

  • 存储时使用时间戳
  • 显示时使用格式化后的时间字符串
  • 需要高精度计时时使用 Performance API
  • 关键业务依赖时间时与服务器时间同步

http://www.kler.cn/a/402350.html

相关文章:

  • 计算机网络的发展
  • Taro 鸿蒙技术内幕系列(三) - 多语言场景下的通用事件系统设计
  • ️ 爬虫开发中常见的性能优化策略有哪些?
  • 优化Docker镜像:提升部署效率与降低资源消耗
  • 大语言模型(LLM)安全:十大风险、影响和防御措施
  • 『 Linux 』网络层 - IP协议 (二)
  • java游戏服务器的缺点思考(xdb为例子)
  • 引擎启动:Spring Boot汽车资讯新纪元
  • Java+JavaFx+Mysql实现客户信息管理系统
  • 软件测试之测试用例扩展
  • 如何去掉el-input 中 type=“number“两侧的上下按键
  • Liebherr利勃海尔 EDI 需求分析
  • React 18 Hooks:函数组件的强大工具
  • C++ 多态相关
  • 【专题】中国企业出海洞察报告暨解码全球制胜之道报告汇总PDF洞察(附原数据表)
  • 小程序19-微信小程序的样式和组件介绍
  • React——useCallback
  • Kubernetes常用命令
  • 2025年软考报名时是什么时候?开考科目如何安排?
  • 使用ufw配置防火墙,允许特定范围IP访问
  • 解决 electron 打包后部分电脑报错 Error: Dynamic Symbol Retrieval Error: Win32 error 126
  • CI配置项,IT服务的关键要素
  • Vue3 + Vite 项目引入 Typescript
  • 应聘美容师要注意什么?博弈美业收银系统/管理系统/拓客系统分享建议
  • 【并发模式】Go 常见并发模式实现Runner、Pool、Work
  • 海外媒体软文发稿:打开全球传播的新窗口-大舍传媒