JS如何对date输入框的YYYY-MM-DD日期减1天且无需处理时区问题
JS实现date输入框值减1天(无时区问题)
因为输入是固定YYYY-MM-DD格式的字符串,且不需要处理时区,最佳实现无需引入第三方依赖,全程避开UTC相关逻辑即可,完整实现如下:
// 原有获取输入框值的逻辑 var date_to_selector = $(this).parent().find("input[name=date_to]"); var date_to = date_to_selector.val(); // 拆分原始日期字符串为数字 const [year, month, day] = date_to.split('-').map(Number); // 构造本地日期对象,注意JS月份从0开始计数,需要减1 const targetDate = new Date(year, month - 1, day); // 执行减1天操作,内置逻辑自动处理跨月、跨年、闰年场景 targetDate.setDate(targetDate.getDate() - 1); // 拼接为YYYY-MM-DD格式,自动补前导零 const date_to_minus_1 = [ targetDate.getFullYear(), String(targetDate.getMonth() + 1).padStart(2, '0'), String(targetDate.getDate()).padStart(2, '0') ].join('-');
方案说明
- 没有直接用
new Date(date_to)解析字符串,避免把输入的YYYY-MM-DD当成UTC时间解析的时区差问题 - 全程使用
getFullYear/getMonth/getDate等本地时间方法,没有调用toISOString等UTC相关接口,不会触发时区转换 - 所有计算都基于本地日期维度,完全匹配无需处理时区的要求
内容的提问来源于stack exchange,提问作者user15123815
相关产品推荐
相关产品推荐

