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

如何在JavaScript中获取日期Ticks?C#与JS结果不一致问题排查

问题分析与解决方案

咱们先拆解你遇到的两个核心问题:日期解析的格式误解,以及JS和C#对「Ticks」的定义差异。

1. JS日期解析的坑:格式识别错误

你用JS处理"01.03.2018"时得到1517184000000,对应的实际日期是2018年1月3日,而非你想要的3月1日。这是因为JS的Date构造函数对.分隔的日期字符串,默认会按MM.DD.YYYY(月.日.年)格式解析,但你输入的是DD.MM.YYYY(日.月.年)格式,导致月份和日期搞反了。

解决这个问题的关键是手动按你需要的格式解析日期:

// 手动解析DD.MM.YYYY格式的日期字符串
function parseDDMMYYYY(dateStr) {
  const [day, month, year] = dateStr.split('.').map(Number);
  // 注意:JS的月份是0~11,所以要减1
  return new Date(year, month - 1, day);
}

// 测试:解析"01.03.2018"
const targetDate = parseDDMMYYYY("01.03.2018");
console.log(targetDate); // 输出 Thu Mar 01 2018 00:00:00 GMT+...(对应你要的日期)

2. JS如何获取C#风格的Ticks

C#的Ticks和JS的时间戳本质完全不同:

  • C# Ticks:从0001年1月1日 00:00:00开始,以100纳秒为单位的计数(1毫秒 = 10000 Ticks)。
  • JS getTime():从1970年1月1日 00:00:00 UTC开始,以毫秒为单位的计数。

要在JS中得到和C#一致的Ticks值,需要两步转换:

  1. 把JS的毫秒时间戳转换成100纳秒单位(乘以10000)。
  2. 加上0001年1月1日到1970年1月1日之间的固定Ticks偏移量:621355968000000000(这个值是固定的,直接复用即可)。

对应的代码实现:

// 将JS日期对象转换为C#风格的Ticks
function dateToCSharpTicks(date) {
  const milliseconds = date.getTime();
  // 0001-01-01到1970-01-01的Ticks偏移量
  const epochOffsetTicks = 621355968000000000;
  // 毫秒转100纳秒,加上偏移量
  return (milliseconds * 10000) + epochOffsetTicks;
}

// 测试:转换目标日期
const csharpTicks = dateToCSharpTicks(targetDate);
console.log(csharpTicks); // 输出 15198624000000000,和C#的结果完全一致

完整验证代码

把两段逻辑结合起来,就能直接得到你想要的结果:

function parseDDMMYYYY(dateStr) {
  const [day, month, year] = dateStr.split('.').map(Number);
  return new Date(year, month - 1, day);
}

function dateToCSharpTicks(date) {
  const milliseconds = date.getTime();
  const epochOffsetTicks = 621355968000000000;
  return (milliseconds * 10000) + epochOffsetTicks;
}

const targetDate = parseDDMMYYYY("01.03.2018");
console.log(dateToCSharpTicks(targetDate)); // 15198624000000000

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 07:00:12