如何在API URL查询字符串中更新日期变量实现跨日期数据拉取
原生 Date 对象完全可以实现日期增减需求,不需要拆分 ISO 字符串手动修改年、月、日,也能自动处理跨月、跨年、闰年等边界情况,不用自己做兼容逻辑。
原生实现方案
核心逻辑是直接操作 Date 实例的日期值,再格式化为接口需要的 YYYY-MM-DD 格式即可:
// 日期格式化函数,输出 YYYY-MM-DD 格式 // 如果接口需要UTC日期,把下面的get方法替换为getUTC*版本即可:getUTCFullYear、getUTCMonth、getUTCDate function formatDate(date) { const year = date.getFullYear() const month = String(date.getMonth() + 1).padStart(2, '0') const day = String(date.getDate()).padStart(2, '0') return `${year}-${month}-${day}` } // 初始化当前日期变量 let currentDate = new Date() // 日期增减封装 function adjustDate(dayOffset) { currentDate.setDate(currentDate.getDate() + dayOffset) const targetDateStr = formatDate(currentDate) // 调用拉取数据逻辑 fetchBookings(targetDateStr) } // 拉取预约数据 function fetchBookings(dateStr) { fetch(`https://www.some-url/apps/bookings/calendar-json.php?todayDate=${dateStr}`) .then(res => res.json()) .then(bookingData => { // 渲染预约时段逻辑 }) }
使用的时候,加1天调用 adjustDate(1),减1天调用 adjustDate(-1) 即可,完全符合你要的计数器式操作效果。
注意:toISOString() 输出的是UTC时间的字符串,如果你所在时区和UTC有偏移(比如中国时区是UTC+8),直接截取前10位可能会出现日期差1天的问题,所以更推荐自己写格式化函数,按需使用本地时间或者UTC时间生成日期字符串。
第三方库选择建议
moment.js 目前已经被官方标记为停止新增功能,仅做维护的项目,不推荐新项目引入。
如果你的需求只有简单的日期加减、格式化,用原生方案就足够,不需要额外引入库增加项目体积。如果后续有更复杂的日期处理需求(比如时区转换、相对时间计算、多语言格式化),可以选择更轻量的替代方案:
- day.js:API 设计和 moment.js 几乎一致,核心体积只有2KB,支持按需引入插件扩展功能
- date-fns:函数式设计的日期库,支持按需引入方法,打包体积可控
内容的提问来源于stack exchange,提问作者i-am-niall
相关产品推荐
相关产品推荐

