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

日期为00:00:00时转tick值出现前一天问题的修复咨询

问题修复方案

问题根源

你当前的代码直接将JavaScript Date 对象转为数字(本质是调用Date.valueOf(),返回UTC时间的毫秒数),再进行ticks计算。但你的目标是基于**印度标准时间(IST,GMT+05:30)**的日期生成ticks:当IST时间为00:00:00时,对应的UTC时间是前一天的18:30:00,直接用UTC毫秒数计算自然会得到前一天的ticks值。

无需修改原始日期的修复代码

通过计算本地时间与UTC的偏移量,调整毫秒数后再转换为.NET ticks,就能得到正确结果:

overlapDetails.forEach((dateDetails) => {
  const startDate = dateDetails['start'];
  // 获取本地时间与UTC的偏移量(单位:毫秒,getTimezoneOffset返回UTC-本地的分钟差,需取负转换)
  const timezoneOffsetMs = -startDate.getTimezoneOffset() * 60 * 1000;
  // 计算本地时间对应的等效UTC毫秒数(将IST时间当作UTC时间计算)
  const localBasedUtcMs = startDate.getTime() + timezoneOffsetMs;
  // 转换为.NET ticks:1 tick = 100纳秒,基准值对应1970-01-01 UTC的ticks
  const startDates = localBasedUtcMs * 10000 + 621355968000000000;
  
  console.log(startDates); // 输出预期值:638317152000000000
});

代码说明

  1. startDate.getTimezoneOffset()返回UTC与本地时间的分钟差(IST环境下为-330,因为UTC比IST晚5小时30分),取负后转毫秒得到本地时间相对UTC的正向偏移量。
  2. 原始UTC毫秒数加上偏移量,得到以本地时间为基准的等效UTC毫秒数,相当于把IST的00:00:00当作UTC时间处理。
  3. 按照原逻辑完成ticks转换:毫秒数×10000(转为100纳秒单位)加上基准ticks值621355968000000000。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.05 17:02:49