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

如何不使用第三方库获取指定时区下自定义日期的毫秒时间戳

原生JS实现指定时区日期转时间戳方案

核心实现逻辑

无需引入任何第三方库,直接利用JS原生Intl.DateTimeFormat内置的IANA时区数据库支持实现,核心思路是将用户选中的日期转换为目标时区(Europe/Moscow)对应0点的UTC时间,再输出时间戳。

完整实现代码

function getMoscowDateTimestamp(inputDateStr) {
  // 入参支持YYYY-MM-DD、YYYY-MM-DDTHH:mm:ss格式,默认取日期段的0点计算
  const inputDate = new Date(inputDateStr);
  const inputYear = inputDate.getFullYear();
  const inputMonth = inputDate.getMonth();
  const inputDay = inputDate.getDate();

  // 配置莫斯科时区格式化工具
  const moscowFormatter = new Intl.DateTimeFormat('en-US', {
    timeZone: 'Europe/Moscow',
    year: 'numeric',
    month: '2-digit',
    day: '2-digit',
    hour: '2-digit',
    minute: '2-digit',
    second: '2-digit',
    hour12: false
  });

  // 以输入日期的UTC 0点为基准,格式化得到莫斯科时区对应的时间分段
  const utcBase = new Date(Date.UTC(inputYear, inputMonth, inputDay, 0, 0, 0));
  const formatParts = moscowFormatter.formatToParts(utcBase);
  const timeMap = {};
  formatParts.forEach(({type, value}) => {
    timeMap[type] = parseInt(value, 10)
  })

  // 构造莫斯科时区对应时间的UTC时间戳
  const targetTime = new Date(Date.UTC(
    timeMap.year,
    timeMap.month - 1,
    timeMap.day,
    timeMap.hour,
    timeMap.minute,
    timeMap.second
  ))

  // 返回毫秒级时间戳,需要秒级的话直接除以1000取整即可
  return targetTime.getTime()
}

使用示例

// 测试用例:选中2021年11月8日
const result = getMoscowDateTimestamp('2021-11-08')
// 输出结果完全等效于 moment.tz('2021-11-08T00:00:00', 'Europe/Moscow').valueOf()
console.log(result)

该实现兼容所有现代浏览器(Chrome 24+、Firefox 52+、Safari 10+、Edge 12+)以及Node.js 13+版本,以上环境均原生支持Europe/Moscow这类IANA标准时区标识,无需额外依赖。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.27 10:15:04