如何在cloud function中去除时区偏移,仅提取不带时间的日期?
问题原因
- JS 内置的
Date对象的setHours方法默认使用代码运行环境的本地时区计算时间,你的云函数运行环境时区为 UTC,所以执行setHours(0,0,0,0)得到的是 UTC 时区当日零点的时间戳,和你预期的目标时区(UTC+5:30)零点存在5.5小时的偏差,因此输出结果不符合预期。
解决方案
方案1:提取 UTC 时区当日零点
如果你需要的是 UTC 时区的零点时间戳,直接将 setHours 替换为 setUTCHours 即可:
const todayDateTime = new Date(1622221514407); const todayInMilliseconds = new Date(todayDateTime).setUTCHours(0,0,0,0); console.log(todayInMilliseconds);
方案2:提取指定时区当日零点
如果你需要固定获取 UTC+5:30 这类指定时区的零点时间戳,可以手动补偿时区偏移实现:
const targetTimezoneOffsetMin = 5.5 * 60; // 目标时区相对 UTC 的偏移分钟数,UTC+5:30 对应 330 分钟 const originTimestamp = 1622221514407; const date = new Date(originTimestamp); // 计算目标时区下当日零点的时间戳 const utcTotalMin = date.getUTCHours() * 60 + date.getUTCMinutes() + date.getTimezoneOffset(); const targetDayStartTotalMin = Math.floor((utcTotalMin + targetTimezoneOffsetMin) / 1440) * 1440 - targetTimezoneOffsetMin; const targetDayStartTimestamp = targetDayStartTotalMin * 60 * 1000; console.log(targetDayStartTimestamp); // 输出 1622140200000 符合预期
方案3:修改云函数运行时区
如果你所有业务都基于 UTC+5:30 时区处理,也可以直接修改云函数运行环境的默认时区,修改后你原有代码的运行结果就会符合预期。
内容的提问来源于stack exchange,提问作者Watery Desert
相关产品推荐
相关产品推荐

