JavaScript如何将用户输入日期调整为凌晨12:01后转换为Epoch时间戳
JavaScript实现方案
核心逻辑为解析输入日期后手动重置时间部分,再转换为时间戳即可,具体实现如下:
- 先校验输入日期的合法性,避免无效输入导致报错
- 调用
setHours方法将时间固定设置为0时1分0秒0毫秒 - 调用
getTime()方法获取毫秒级Epoch时间戳,若需要秒级可除以1000后取整
完整代码示例
/** * 将输入日期的时间设为00:01后转换为Epoch时间戳 * @param {string|number|Date} inputDate 用户输入的日期,支持YYYY-MM-DD字符串、时间戳、Date对象 * @param {boolean} [useUTC=false] 是否使用UTC时区计算,默认用本地时区 * @param {boolean} [returnSecond=false] 是否返回秒级时间戳,默认返回毫秒级 * @returns {number} 对应的Epoch时间戳 */ function convertToTargetTimestamp(inputDate, useUTC = false, returnSecond = false) { const date = new Date(inputDate); // 校验日期有效性 if (isNaN(date.valueOf())) { throw new Error('请输入有效的日期格式'); } // 设置时间为00:01:00.000 if (useUTC) { date.setUTCHours(0, 1, 0, 0); } else { date.setHours(0, 1, 0, 0); } const timestamp = date.getTime(); return returnSecond ? Math.floor(timestamp / 1000) : timestamp; } // 测试用例 // 输入日期字符串 console.log(convertToTargetTimestamp('2024-10-01')); // 输入日期字符串 + UTC时区 + 秒级时间戳 console.log(convertToTargetTimestamp('2024-10-01', true, true));
注意事项
如果你的业务需要跨时区适配,建议统一使用UTC时区计算,避免不同地区用户生成的时间戳出现偏移。
如果用户输入的日期包含时间部分,代码会自动覆盖时间部分为00:01,不需要提前做额外处理。
内容的提问来源于stack exchange,提问作者S.Troy
相关产品推荐
相关产品推荐

