未指定时间参数时如何让Date构造函数生成当日最大时间而非零点
实现方案
你可以直接基于原生Date的实例方法实现需求,无需额外依赖:
基础实现(适配运行环境本地时区)
如果你的服务部署在尼泊尔时区,直接用这个版本即可:
function getDateWithFallbackEndOfDay(dateInput) { const date = new Date(dateInput); // 校验日期合法性 if (isNaN(date.getTime())) { throw new Error('无效的日期输入'); } // 正则判断输入是否包含时间部分(匹配 HH:mm 格式) const hasTimeParam = /\d{1,2}:\d{1,2}/.test(dateInput); // 仅当没有传入时间参数时,设置为当日最后一秒 if (!hasTimeParam) { date.setHours(23, 59, 59, 999); } return date; }
用法示例
const result = getDateWithFallbackEndOfDay("Thu Jul 08 2021"); // 输出:Thu Jul 08 2021 23:59:59 GMT+0545 (尼泊尔标准时间)
跨时区兼容实现(固定返回尼泊尔时区的当日结束时间)
如果服务运行环境不是尼泊尔时区,用这个版本固定时区偏移:
function getNepalDateWithFallbackEndOfDay(dateInput) { const date = new Date(dateInput); if (isNaN(date.getTime())) { throw new Error('无效的日期输入'); } const hasTimeParam = /\d{1,2}:\d{1,2}/.test(dateInput); if (hasTimeParam) return date; // 尼泊尔时区为GMT+5:45,对应时区偏移量为-345分钟 const NEPAL_TIMEZONE_OFFSET = -345; const localOffset = date.getTimezoneOffset(); // 先对齐到尼泊尔时区的当日0点 date.setMinutes(date.getMinutes() + localOffset - NEPAL_TIMEZONE_OFFSET); // 再设置为当日最后一秒 date.setHours(23, 59, 59, 999); return date; }
内容的提问来源于stack exchange,提问作者samman adhikari
相关产品推荐
相关产品推荐

