2016-05-03 18 views
19

Czy ktoś wie o prostym sposobie brania randki (np. Dzisiaj) i powrotu X dni, X miesięcy i X lat?Odejmowanie dni, miesięcy, lat od daty w kodzie JavaScript

Próbowałem że:

var date = new Date(); 
$("#searchDateFrom").val((date.getMonth() -1) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1)); 

Ale mam negatywny datę, na przykład dzisiaj wyjście było:

3/-3/2015

Każda rada ?

Dzięki.

+3

'date.get ....' zwróci 'Number' i jeśli odejmujesz liczbę od innej' liczby', wartość może być ujemna (jeśli lewa wartość jest mniejsza) .. Proponuję ci aby użyć metod 'DateObj.set ...', a następnie pobrać odpowiednie wartości ... – Rayon

Odpowiedz

30

Po prostu zmniejszasz wartości z liczby. Tak więc odjęcie 6 od 3 (data) zwróci tylko -3.

Trzeba indywidualnie dodaj/usuń jednostkę czasu w obiekcie Date

var date = new Date(); 
date.setDate(date.getDate() - 6); 
date.setFullYear(date.getFullYear() - 1); 
$("#searchDateFrom").val((date.getMonth()) + '/' + (date.getDate()) + '/' + (date.getFullYear())); 
+0

Dziękuję, działało idealnie! – user3378165

+1

getMonth() ma wartość zero. Oznacza to, że pokaże zły miesiąc. Przykład: 10 jest listopada. – Tony

9

Zalecam korzystanie z bibliotek MomentJS. Sprawiają, że wszystkie interakcje z datami są o wiele prostsze.

Jeśli używasz Moment, Twój kod będzie tak proste, jak to:

var today = moment(); 
var nextMonth = today.add('month', 1); 

można znaleźć MomentJS tutaj: http://momentjs.com/

UPDATE:

W JavaScript, datę. Funkcja getDate() zwraca bieżący dzień miesiąca z zakresu od 1 do 31. Odejmujesz 6 od tego numeru, a obecnie jest to 3 dzień miesiąca. To przynosi wartość do -3.

+0

Co jest nie tak z kodem OP podanym? Czy mogę powiedzieć, że ... – Rayon

+0

@Fvb Dziękuję, przeczytałem przewodnik i jest to doskonała biblioteka, dziękuję za pomysł, aby z niego skorzystać. – user3378165

+0

Należy pamiętać, że plik moment.js dodaje około 16 tys. Aplikacji. Zazwyczaj nie jest to wielka sprawa. Ale jeśli wydajność jest krytyczna, trzymanie się zwykłego starego js jest tańsze dla tak małych obliczeń. – shanemgrey

9

Jak mówili inni jesteś odejmując od wartości liczbowych zwracane z metod jak date.getDate(), trzeba zresetować te wartości na swój Zmienna daty. Poniżej stworzyłem metodę, która zrobi to za Ciebie. Tworzy datę przy użyciu new Date(), która zainicjuje z bieżącą datą, a następnie ustawia datę, miesiąc i rok zgodnie z przekazanymi wartościami. Na przykład, jeśli chcesz wrócić 6 dni, a następnie przejść w -6, tak jak var newdate = createDate(-6,0,0). Jeśli nie chcesz ustawiać przejścia wartości w zera (lub możesz ustawić wartości domyślne). Metoda zwróci Ci nową datę (przetestowane w Chrome i Firefox).

function createDate(days, months, years) { 
     var date = new Date(); 
     date.setDate(date.getDate() + days); 
     date.setMonth(date.getMonth() + months); 
     date.setFullYear(date.getFullYear() + years); 
     return date;  
    }