Jak ustalić za rok od teraz w Javascript


112

Próbuję uzyskać rok od daty obecnej, ale to nie działa.

JS:

var now = new Date();

var oneYr = new Date();
oneYr.setYear(now.getYear() + 1);
$("#yearFromNow").append(oneYr.toString());

var oneMonth = new Date();
oneMonth.setMonth(now.getMonth() + 1);
$("#monthFromNow").append(oneMonth.toString());

Wynik:

one mo. = Thu Dec 22 112 15:16:01 GMT-0500 (Eastern Standard Time)

one yr. = Sun Jan 22 2012 15:16:01 GMT-0500 (Eastern Standard Time)

Rok ma Dec 22 112- ?? Miesiąc jest wyświetlany poprawnie Jan 22 2012.

Jeśli chcesz przy tym majstrować, http://jsbin.com/alezaj/edit#javascript,html,live . To jest w Chrome i Firefox.

Dzięki!

Odpowiedzi:


88

Powinieneś użyć getFullYear()zamiast getYear(). getYear()zwraca rzeczywisty rok minus 1900 (a więc jest dość bezużyteczny).

Zatem data oznaczająca dokładnie rok od chwili obecnej byłaby:

var oneYearFromNow = new Date();
oneYearFromNow.setFullYear(oneYearFromNow.getFullYear() + 1);

Pamiętaj, że data zostanie dostosowana, jeśli zrobisz to 29 lutego.

Podobnie możesz uzyskać datę za miesiąc od teraz za pomocą getMonth()i setMonth(). Nie musisz się martwić o „przejście” z bieżącego roku na następny, jeśli zrobisz to w grudniu; data zostanie dostosowana automatycznie. To samo dotyczy dnia miesiąca za pośrednictwem getDate()i setDate().


1
Dla każdego, kto zastanawia się, jak radzi sobie z latami przestępnymi, zrobiłem to w konsoli Firefox ... >> x = new Date ('2000-02-29') -> Date 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01-Mar-2001"
Ivan

29
Czy to nie jest przezabawne? Aby uzyskać datę za rok w javascript, należy napisać: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

206

Stworzy to Datedokładnie rok w przyszłości z tylko jedną linią. Najpierw otrzymujemy fullYearz a new Date, zwiększamy go, ustawiamy jako rok a new Date. Możesz pomyśleć, że skończymy, ale gdybyśmy zatrzymali, zwróciłby znacznik czasu, a nie Dateobiekt, więc opakowujemy całość w Datekonstruktor.

new Date(new Date().setFullYear(new Date().getFullYear() + 1))

13
setYear()jest przestarzały , setFullYear()należy go zamiast tego użyć.
tsauerwein

1
Jedna linijka bez zmiennych pośrednich do przydzielenia! Doskonały!
theUtherSide

1
to nie obsłuży godzin, minut i sekund, zostanie ustawiony na bieżący czas
Dheeraj

32

W stanie setYear()wycofanym, prawidłowy wariant to:

// plus 1 year
new Date().setFullYear(new Date().getFullYear() + 1)
// plus 1 month
new Date().setMonth(new Date().getMonth() + 1)
// plus 1 day
new Date().setDate(new Date().getDate() + 1)

Wszystkie przykłady zwracają uniksowy znacznik czasu, jeśli chcesz pobrać Dateobiekt - po prostu zawiń go innymnew Date(...)


6

Korzystając z niektórych odpowiedzi na tej stronie i tutaj , wymyśliłem własną odpowiedź, ponieważ żadna z tych odpowiedzi w pełni nie rozwiązała problemu.

Oto sedno tego

var startDate = "27 Apr 2017";
var numOfYears = 1;
var expireDate = new Date(startDate);
expireDate.setFullYear(expireDate.getFullYear() + numOfYears);
expireDate.setDate(expireDate.getDate() -1);

A tutaj JSFiddle, który ma działający przykład: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
do czego służy expireDate.getDate () - 1?
Uzer


1

Użyj setFullyear tak, jak napisali inni, ale pamiętaj, że zwraca to wartość znacznika czasu, a nie obiekt daty. Jest to również dobry kandydat do dodawania funkcjonalności poprzez prototyp. To prowadzi nas do następującego wzoru:

Date.prototype.addYears = function(n) {
    var now = new Date();
    return new Date(now.setFullYear(now.getFullYear() + n));
};

console.log('Year from now is', new Date().addYears(1));

0

W bardzo prosty sposób. użyj tego kodu.

// define function 
function nextYearDate(date1) {
    var date2 = new Date(date1);
    var date3 = date2.setDate(date2.getDate() - 1);
    var date = new Date(date3);
    var day = date.getDate();
    var month = date.getMonth()+1;
    var year = date.getFullYear()+1;
    var newdate = year + '-' + (month < 10 ? '0' : '') + month + '-' + (day < 10 ? '0' : '') + day;
    $("#next_date").val(newdate);
}
// call function.
<input type="date" name="current_date" id="current_date" value="" onblur="nextYearDate(this.value);" />

<input type="date" name="next_date" id="next_date" value="" onblur="nextYearDate(this.value);" />

1
Dlaczego u licha JQuery stawia tutaj swoją brzydką głowę? JQuery! = JS
Uzer
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.