Як визначити один рік відтепер у Javascript


111

Я намагаюся отримати рік від дати, і це не працює.

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());

Вихід:

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)

Рік має Dec 22 112- ?? Місяць правильно відображається Jan 22 2012.

Якщо ви хочете повозитися з ним, http://jsbin.com/alezaj/edit#javascript,html,живіть . Це в Chrome і Firefox.

Дякую!

Відповіді:


88

Ви повинні використовувати getFullYear()замість getYear(). getYear()повертає фактичний рік мінус 1900 (і так досить марно).

Таким чином, дата, що відзначається рівно через рік від цього моменту, буде:

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

Зауважте, що дата буде скоригована, якщо ви зробите це 29 лютого.

Аналогічно, ви можете отримати дату, яка буде через місяць через getMonth()і setMonth(). Вам не доведеться турбуватися про "перекидання" з поточного року на наступний рік, якщо ви зробите це в грудні; дата буде коригуватися автоматично. Те саме стосується дня місяця через getDate()таsetDate() .


1
Для всіх, хто цікавиться, як це стосується високосних років, я зробив це на консолі Firefox ... >> x = нова дата ('2000-02-29') -> дата 2000-02-29T00: 00: 00.000Z >> x.setYear (2001) -> 983404800000 >> x.toLocaleFormat ('% d-% b-% Y') -> "01 березня 2001"
Іван

29
Хіба це не смішно? Щоб отримати побачення через рік у javascript, потрібно написати: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

205

Це створить Dateрівно рік в майбутньому лише з одним рядком. Спочатку ми отримуємо fullYearвід a new Date, прирости його, встановивши, що як рік a new Date. Ви можете подумати, що ми б там зробили, але якщо ми зупинимось, то повернеться часова мітка, а не Dateоб'єкт, тому ми загортаємо всю справу в Dateконструктор.

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

13
setYear()є застарілим , setFullYear()замість нього слід використовувати.
tsauerwein

1
Один вкладиш без проміжних змінних для виділення! Відмінно!
thetherSide

1
це не обробляє години, хвилини та секунди, воно буде встановлено на поточний час
Dheeraj

32

Як setYear()застарілий, правильний варіант:

// 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)

Усі приклади повертають часову позначку Unix, якщо ви хочете отримати Dateоб’єкт - просто оберніть його іншимnew Date(...)


6

Використовуючи деякі відповіді на цій сторінці та тут , я придумав власну відповідь, оскільки жодна з цих відповідей повністю не вирішила мене.

Ось суть його

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

І ось AA JSFiddle, який має робочий приклад: https://jsfiddle.net/wavesailor/g9a6qqq5/


1
для чого expireDate.getDate () - 1 для?
Uzer


1

Використовуйте setFullyear, як опублікували інші, але пам’ятайте, що це повертає значення часової позначки, а не об’єкт дати. Це також хороший кандидат imho додати функціональність через прототип. Це призводить нас до такої схеми:

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

Дуже простим способом. використовувати цей код.

// 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
Чому на землі JQuery вирощує свою потворну голову? JQuery! = JS
Uzer
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.