var d = new Date();
d.setMonth(d.getMonth() - 3);
Điều này làm việc cho tháng một. Chạy đoạn trích này:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Có một số hãy cẩn thận ...
Một tháng là một điều tò mò. Làm thế nào để bạn xác định 1 tháng? 30 ngày? Hầu hết mọi người sẽ nói rằng một tháng trước có nghĩa là cùng một ngày trong tháng trên trích dẫn tháng trước cần thiết . Nhưng hơn một nửa thời gian, đó là 31 ngày trước, không phải 30. Và nếu hôm nay là ngày 31 của tháng (và đó không phải là tháng 8 hay Decemeber), ngày đó của tháng không tồn tại trong tháng trước.
Thật thú vị, Google đồng ý với JavaScript nếu bạn hỏi nó ngày nào là một tháng trước ngày khác :
Nó cũng nói rằng một tháng dài 30.4167 ngày :
Vậy, có phải một tháng trước ngày 31 tháng 3 cùng ngày với một tháng trước ngày 28 tháng 3, sớm hơn 3 ngày? Tất cả điều này phụ thuộc vào ý của bạn là "một tháng trước". Đi nói chuyện với chủ sở hữu sản phẩm của bạn.
Nếu bạn muốn làm như khoảnh khắc, và sửa những lỗi cuối cùng của tháng bằng cách chuyển sang ngày cuối cùng của tháng, bạn có thể làm một cái gì đó như thế này:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Nếu yêu cầu của bạn phức tạp hơn thế, hãy sử dụng một số phép toán và viết một số mã. Bạn là một nhà phát triển! Bạn không cần phải cài đặt một thư viện! Bạn không phải sao chép và dán từ stackoverflow! Bạn có thể tự phát triển mã để làm chính xác những gì bạn cần!