假设我有一个字符串格式的日期,比如"2021-07-19";。如何从用字符串表示的日期中减去x天?
我试着先将字符串转换为日期,然后减去天数,再转换回字符串,但这不起作用。
const dateString = "2021-07-19"
const previousDayDate = new Date(dateString)
previousDayDate.setDate(previousDayDate.getDate() - 1)
const previousDayDateString = previousDayDate.toString()
最终结果应该是";2021-07-18";。相反,我得到的日期是一个完整的字符串:Sun Jul 18 2021 01:00:00 GMT+0100 (British Summer Time)
你得到错误日期的原因是"2021-07-19";由内置解析器解析为UTC,但您使用的所有其他方法都是本地方法,因此您似乎得到了错误的日期或时间。除此之外,你的算法是合理的。只需将字符串解析为本地字符串即可:
// Parse string in YYYY-MM-DD format as local
function parseISOLocal(s) {
let [Y, M, D] = s.split(/W/);
return new Date(Y, M-1, D);
}
console.log(parseISOLocal('2021-07-20').toString());
这是一个非常常见的问题。
注意,在我将输入日期更改为YYYY-MM-DD之前,下面的代码段在我的区域设置中不起作用。
// const dateString = "2021-19-07" - your format
const dateString = "2021-07-19" // format testable in my locale
const previousDayDate = new Date(dateString)
previousDayDate.setDate(previousDayDate.getDate() - 1)
const previousDayDateString = `${previousDayDate.getFullYear()}-${('0' + (previousDayDate.getMonth()+1)).slice(-2)}-${('0' + previousDayDate.getDate()).slice(-2)}`;
console.log(previousDayDateString)
使用Moment.js
const dateString = moment("2021-07-19", "YYYY-MM-DD").startOf("day")
const previousDayDateString = dateString.subtract(1, "days").format("YYYY-MM-DD");
感谢大家的建议。我遵循了与Spencer上面评论相同的惯例(如何格式化JavaScript日期?(,做了:
const dateString = "2021-07-19"
const previousDayDate = new Date(dateString)
previousDayDate.setDate(previousDayDate.getDate() - 1)
const previousDayString = previousDayDate.toLocaleDateString("en-CA").split(",")[0]
console.log(previousDayString)