日期为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 });
代码说明
startDate.getTimezoneOffset()返回UTC与本地时间的分钟差(IST环境下为-330,因为UTC比IST晚5小时30分),取负后转毫秒得到本地时间相对UTC的正向偏移量。- 原始UTC毫秒数加上偏移量,得到以本地时间为基准的等效UTC毫秒数,相当于把IST的
00:00:00当作UTC时间处理。 - 按照原逻辑完成ticks转换:毫秒数×10000(转为100纳秒单位)加上基准ticks值
621355968000000000。
内容的提问来源于stack exchange,提问作者Swarup
相关产品推荐
相关产品推荐

