JavaScript时间戳与时间的转化

发布于:2025-04-23 ⋅ 阅读:(59) ⋅ 点赞:(0)

在 JavaScript 中,时间戳(Timestamp)通常指 Unix 时间戳,即从 1970年1月1日 00:00:00 UTC 到某个时间点经过的 毫秒数(注意:其他语言如 Python 可能使用秒,但 JavaScript 默认用毫秒)。以下是时间戳与时间格式相互转换的常用方法:


1. 获取当前时间戳

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

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

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


2. 时间戳 → 时间对象

用时间戳生成 Date 对象后,可提取具体时间信息:

const timestamp = 1696147200000; // 示例时间戳(2023-10-01 00:00:00 UTC)
const date = new Date(timestamp);

// 提取时间信息(本地时区)
const year = date.getFullYear();     // 2023
const month = date.getMonth() + 1;   // 10(注意月份从0开始,需+1)
const day = date.getDate();          // 1
const hours = date.getHours();       // 8(假设时区为UTC+8)
const minutes = date.getMinutes();   // 0
const seconds = date.getSeconds();   // 0

// 提取UTC时间信息
const utcHours = date.getUTCHours(); // 0(UTC时间)


3. 时间戳 → 格式化字符串

将 Date 对象格式化为易读的字符串:

// 方法1:使用内置方法(本地时区)
const localDateStr = date.toLocaleDateString(); // "2023/10/1"
const localTimeStr = date.toLocaleTimeString(); // "08:00:00"
const localStr = date.toLocaleString();        // "2023/10/1 08:00:00"

// 方法2:手动拼接(灵活定制)
const formattedTime = `${year}-${month.toString().padStart(2, '0')}-${day.toString().padStart(2, '0')} ${hours}:${minutes}:${seconds}`;
// "2023-10-01 08:00:00"

// 方法3:转成ISO标准格式(UTC时间)
const isoString = date.toISOString(); // "2023-10-01T00:00:00.000Z"


4. 时间字符串 → 时间戳

将日期字符串解析为时间戳:

// 方法1:Date.parse()(需符合标准格式)
const timestamp4 = Date.parse('2023-10-01T00:00:00Z'); // 1696147200000(UTC时间)

// 方法2:new Date().getTime()
const dateStr = '2023-10-01 08:00:00'; // 假设本地时区为UTC+8
const timestamp5 = new Date(dateStr).getTime(); // 1696147200000(需注意时区问题)

// 注意:非标准格式可能导致解析失败,建议使用ISO格式(YYYY-MM-DDTHH:mm:ssZ)


5. 常见场景示例

场景1:计算时间差

const start = Date.now();
// ...执行某些操作
const end = Date.now();
const duration = end - start; // 毫秒数

场景2:倒计时功能

function formatCountdown(timestamp) {
  const now = Date.now();
  const diff = timestamp - now;
  const days = Math.floor(diff / (1000 * 60 * 60 * 24));
  const hours = Math.floor((diff % (1000 * 60 * 60 * 24)) / (1000 * 60 * 60));
  return `${days}天 ${hours}小时`;
}

场景3:UTC与本地时间互转

// UTC时间 → 本地时间
const utcDate = new Date('2023-10-01T00:00:00Z');
const localHours = utcDate.getHours(); // 本地时区的小时数(如UTC+8得到8)

// 本地时间 → UTC时间戳
const localDate = new Date(2023, 9, 1, 8, 0, 0); // 2023-10-01 08:00:00(本地时间)
const utcTimestamp = Date.UTC(2023, 9, 1, 0, 0, 0); // 1696147200000


注意事项

  1. 时区问题

    • new Date() 和 Date.parse() 默认使用本地时区,而 toISOString() 和 Date.UTC() 使用 UTC 时区。

    • 跨时区应用建议统一使用 UTC 时间。

  2. 时间戳单位

    • JavaScript 使用 毫秒,与其他语言(如 Python 的秒)转换时需注意单位换算:

      const seconds = Math.floor(timestamp / 1000); // 毫秒转秒
      const milliseconds = seconds * 1000;          // 秒转毫秒
  3. 浏览器兼容性

    • 避免使用非标准日期格式(如 '2023-10-01' 不带时间部分),不同浏览器解析结果可能不一致。


网站公告

今日签到

点亮在社区的每一天
去签到