JavaScript实现不同格式日期四舍五入到最近完整日期的问题
JavaScript 实现日期四舍五入到最近UTC零点
核心逻辑
- 首先将任意合法的日期输入(ISO字符串、13位时间戳)统一转为JS内置
Date对象 - 给当前日期加12小时的毫秒偏移量,自动完成跨天判断
- 把偏移后的日期的UTC时、分、秒、毫秒全部置为0,即为符合要求的最近完整日期
完整代码
function roundToNearestUTCDate(dateInput) { // 兼容ISO字符串、13位时间戳入参 const date = new Date(dateInput); // 校验日期合法性 if (isNaN(date.getTime())) { throw new Error('无效的日期输入'); } // 加12小时毫秒数:12 * 60 * 60 * 1000 = 43200000 const offsetDate = new Date(date.getTime() + 43200000); // 置UTC时分秒毫秒为0 offsetDate.setUTCHours(0, 0, 0, 0); return offsetDate; }
测试验证
你给出的两个示例测试结果如下:
// 测试1:ISO字符串输入 const test1 = roundToNearestUTCDate('2022-03-13T23:00:00.000Z'); console.log(test1.toISOString()); // 输出 2022-03-14T00:00:00.000Z // 测试2:时间戳输入 const test2 = roundToNearestUTCDate(1647817200000); console.log(test2.toISOString()); // 输出 2022-03-14T00:00:00.000Z // 测试3:凌晨1点的场景 const test3 = roundToNearestUTCDate('2022-03-14T01:00:00.000Z'); console.log(test3.toISOString()); // 输出 2022-03-14T00:00:00.000Z
输出格式说明
如果需要直接拿到ISO字符串,可以直接调用返回值的toISOString()方法;如果需要13位时间戳,调用getTime()方法即可。
内容的提问来源于stack exchange,提问作者juhend23d
相关产品推荐
相关产品推荐

