var d = new Date();
d.setMonth(d.getMonth() - 3);
To działa na styczeń. Uruchom ten fragment:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Jest kilka zastrzeżeń ...
Miesiąc to ciekawa sprawa. Jak definiujesz 1 miesiąc? 30 dni? Większość ludzi powie, że miesiąc temu oznacza ten sam dzień miesiąca, w którym potrzebne jest cytowanie z poprzedniego miesiąca . Ale więcej niż połowa czasu, czyli 31 dni temu, a nie 30. A jeśli dzisiaj jest 31 dzień miesiąca (a nie jest to sierpień ani grudzień), to ten dzień miesiąca nie istnieje w poprzednim miesiącu.
Co ciekawe, Google zgadza się z JavaScriptem, jeśli zapytasz go, jaki dzień jest miesiąc przed kolejnym :
Mówi się również, że jeden miesiąc ma 30,4167 dni :
Czy zatem miesiąc przed 31 marca jest tym samym dniem, co miesiąc przed 28 marca, a 3 dni wcześniej? Wszystko zależy od tego, co masz na myśli, mówiąc „miesiąc wcześniej”. Porozmawiaj z właścicielem produktu.
Jeśli chcesz zrobić to, co robi momentjs i poprawić te błędy ostatniego dnia miesiąca, przechodząc do ostatniego dnia miesiąca, możesz zrobić coś takiego:
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());
Jeśli twoje wymagania są bardziej skomplikowane, użyj trochę matematyki i napisz kod. Jesteś programistą! Nie musisz instalować biblioteki! Nie musisz kopiować i wklejać ze stosu overflow! Możesz samodzielnie opracować kod, aby robić dokładnie to, czego potrzebujesz!