Jak uzyskać 30 dni przed aktualną datą?


100

Mam pole wprowadzania kalendarza początkowego i pole wprowadzania kalendarza końcowego. Chcemy, aby domyślne pole wprowadzania kalendarza początkowego 30 dni przed bieżącą datą i pole wprowadzania kalendarza końcowego było datą bieżącą. Oto moje vars randkowe.

var today = new Date(),
    dd    = today.getDate(),
    mm    = today.getMonth(),
    yyyy  = today.getFullYear(),
    month = ["January", "February", "March",
        "April", "May", "June", "July", "August",
        "September", "October" "November", "December"],
    startdate = month[mm] + ", " + yyyy.toString();

Data końcowa byłaby podobna do var enddate = startdate - 30;tej. Oczywiście to nie zadziała.

Jeśli więc aktualna data to 30 grudnia 2011 r., Chciałbym, aby data początkowa to 1 grudnia 2011 r.

EDYCJA: Odpowiedzi na moje pytanie ... w pewnym sensie. Date.today();i Date.today().add(-30);działa, ale potrzebuję daty w formacie January 13, 2012. Nie Fri Jan 13 2012 10:48:56 GMT -055 (EST). Jakaś pomoc?

WIĘCEJ EDYCJI: W chwili pisania tego tekstu jest rok 2018. Wystarczy użyć Moment.js . To jest najlepsze.


stackoverflow.com/questions/563406/ ... Myślę, że to może pomóc.
— Tim Withers

Odpowiedzi:


153

Spróbuj użyć doskonałej biblioteki dat JavaScript Datejs (oryginał nie jest już obsługiwany, więc możesz być zainteresowany tym aktywnie utrzymywanym widelcem ):

Date.today().add(-30).days(); // or...
Date.today().add({days:-30});

[Edytować]

Zobacz także doskonałą bibliotekę dat JavaScript Moment.js :

moment().subtract(30, 'days'); // or...
moment().add(-30, 'days');

3
Walczyłem o ustalenie daty rozpoczęcia i zakończenia 30 dni przed i po dzisiejszym dniu w UTC bez czasu. To zadziałało:moment( moment().subtract(30, 'days') ).format("YYYY-MM-DD")
— Dylan Valade

3
Użyłem tego moment()podejścia i dołączyłem toDate()metodę, aby odzyskać obiekt daty JavaScript. Dzięki!
— Brylie Christopher Oxley,

6
Dlaczego miałbyś do tego używać biblioteki? To wydaje się szalone.
— Harry

1
czy możesz polecić bibliotekę dla console.log?
— Andre Elrico

160

Spróbuj tego

var today = new Date()
var priorDate = new Date().setDate(today.getDate()-30)

Jak zauważył @Neel, ta metoda zwraca w formacie znacznika czasu Javascript. Aby przekształcić go z powrotem w obiekt Date, musisz przekazać powyższe do nowego obiektu Date; new Date(priorDate).


17
Bez korzystania z zewnętrznej biblioteki najbardziej podoba mi się to rozwiązanie. Dzięki.
— Gowiem,

17
Zwróć uwagę, że ta metoda zwraca w formacie znacznika czasu JavaScript. Aby przekonwertować go z powrotem na obiekt daty, musisz przekazać powyższe donew Date(priorDate)
— Neel

1
Czasami chcesz po prostu vanilla js bez biblioteki! Dzięki :)
— Andrew McOlash

Otrzymuję setDate () nie jest funkcją
— chovy

1
@chovy jedynym sposobem mogę sobie wyobrazić, że jesteś coraz to błąd, ponieważ nie dzwonisz setDate()na Dateobiekcie. Nie można jednak zdiagnozować bez zobaczenia kodu.
— Rory McCrossan

91

Oto brzydkie rozwiązanie dla Ciebie:

var date = new Date(new Date().setDate(new Date().getDate() - 30));

25
To zabawne rozwiązanie.
— Mark Rogers,

8
Zgoda - to najlepsze rozwiązanie. To jest dokładnie rozwiązanie odpowiedzi Rory'ego McCrossana - ale zwięzłe i kompletne (nie są wymagane żadne zewnętrzne biblioteki).
— Dan Nissenbaum

7
@MarkRogers „Hilariously” to właściwe słowo. Daty JavaScript są naprawdę absurdalne.
— JosephStyons,

Tak, to jest proste i najlepsze rozwiązanie.
— Sachini Witharana

40
startDate = new Date(today.getTime() - 30*24*60*60*1000);

.getTime()Metoda zwraca standardowy znacznik czasu JS (milisekund od stycznia 1/1970), w którym można wykorzystać regularne operacje matematyczne, które mogą być zasilane z powrotem do obiektu Date bezpośrednio.


10

Uzyskaj następne 30 dni od dzisiaj

let now = new Date()
console.log('Today: ' + now.toUTCString())
let next30days = new Date(now.setDate(now.getDate() + 30))
console.log('Next 30th day: ' + next30days.toUTCString())

Pobierz dzisiaj formularz z ostatnich 30 dni

let now = new Date()
console.log('Today: ' + now.toUTCString())
let last30days = new Date(now.setDate(now.getDate() - 30))
console.log('Last 30th day: ' + last30days.toUTCString())


7

Javascript może sobie z tym poradzić bez żadnych zewnętrznych bibliotek.

var today = new Date();
var dateLimit = new Date(new Date().setDate(today.getDate() - 30));

document.write(today + "<br/>" + dateLimit)


4

Łatwy.(Using Vanilla JS)

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000);

ISOFormat?

let days=30;
this.maxDateTime = new Date(Date.now() - days * 24 * 60 * 60 * 1000).toISOString();

3

let today = new Date()

let last30Days = new Date(today.getFullYear(), today.getMonth(), today.getDate() - 30)

last30Days będzie w obiekcie Date


3

Prosty 1 liniowy kod Vanilla Javascript :

const priorByDays = new Date(Date.now() - days * 24 * 60 * 60 * 1000)

Na przykład: days = 7 Załóż aktualnydate = Fri Sep 18 2020 01:33:26 GMT+0530

Wynik byłby taki: Fri Sep 11 2020 01:34:03 GMT+0530

Piękno tego polega na tym, że możesz nim manipulować, aby uzyskać pożądany typ

  • znak czasu : Date.now() - days * 24 * 60 * 60 * 1000

  • ISOString: new Date(Date.now() - 7 * 24 * 60 * 60 * 1000).toISOString()



2

Wolę moment js

startDate = moment().subtract(30, 'days').format('LL')  // January 29, 2015

endDate = moment().format('LL'); // February 28, 2015

1

To jest wersja ES6

let date = new Date()
let newDate = new Date(date.setDate(date.getDate()-30))
console.log(newDate.getMonth()+1 + '/' + newDate.getDate() + '/' + newDate.getFullYear() )

Czym różni się to od innych odpowiedzi, takich jak ta ? Poza tym nie ma tu nic, czego nie można byłoby zrobić w ES5 ... lub nawet w ES3.
— Heretic Monkey

1

Możesz to zrobić po prostu za pomocą 1 linii kodu za pomocą momentu w Node JS. :)

    let lastOneMonthDate = moment().subtract(30,"days").utc().toISOString()

Nie chcę formatu UTC, ŁATWIEJ: P

    let lastOneMonthDate = moment().subtract(30,"days").toISOString()

1

Jeśli nie masz ochoty na momentjs, możesz użyć tego:

let x = new Date()

x.toISOString(x.setDate(x.getDate())).slice(0, 10)

Zasadniczo pobiera bieżącą datę (wartość liczbową daty bieżącego miesiąca), a następnie ustawia wartość. Następnie konwertuje do formatu ISO, z którego wycinam czystą datę numeryczną (tj. 2019-09-23)

Mam nadzieję, że to komuś pomoże.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.