React中如何从字符串格式日期中减去指定天数并返回YYYY-MM-DD格式字符串?
解决日期字符串减天后的格式化问题
你的问题出在最后一步用了toString()方法——它本来就是用来返回带时区、星期的完整可读日期字符串的,自然不符合你要的YYYY-MM-DD格式。下面给你两种靠谱的解决方案:
方法1:利用toISOString()截取核心部分
toISOString()会返回标准的ISO格式日期字符串(比如"2021-07-18T00:00:00.000Z"),我们只需要截取前10位就能得到目标格式:
const dateString = "2021-07-19" const previousDayDate = new Date(dateString) previousDayDate.setDate(previousDayDate.getDate() - 1) const previousDayDateString = previousDayDate.toISOString().slice(0, 10) // 输出:"2021-07-18"
注意:这个方法是基于UTC时区处理的,如果你的本地时区和UTC差异较大(比如UTC-8),可能需要确认是否符合你的业务逻辑——不过大多数场景下,这种方式已经足够好用。
方法2:手动拼接日期(基于本地时间)
如果你需要严格基于本地时间来生成日期字符串,可以手动提取年、月、日信息,然后拼接成目标格式:
const dateString = "2021-07-19" const previousDayDate = new Date(dateString) previousDayDate.setDate(previousDayDate.getDate() - 1) // 提取各部分信息,注意月份是0开始的,要加1,还要补零确保两位 const year = previousDayDate.getFullYear() const month = String(previousDayDate.getMonth() + 1).padStart(2, '0') const day = String(previousDayDate.getDate()).padStart(2, '0') const previousDayDateString = `${year}-${month}-${day}` // 输出:"2021-07-18"
这种方法完全基于本地时间计算,不会受UTC时区的影响,适合对时区敏感的场景。
内容的提问来源于stack exchange,提问作者Adam
相关产品推荐
相关产品推荐

