Как определить через год в Javascript


112

Я пытаюсь сделать это через год, но это не работает.

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,live . Это в Chrome и Firefox.

Спасибо!

Ответы:


89

Вы должны использовать getFullYear()вместо getYear(). getYear()возвращает фактический год минус 1900 (и поэтому бесполезен).

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

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

Обратите внимание, что дата будет изменена, если вы сделаете это 29 февраля.

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


1
Для тех, кому интересно, как это работает с високосными годами, я сделал это в консоли 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»
Иван

29
Разве это не весело? Чтобы получить дату через год в javascript, нужно написать: new Date(new Date().setFullYear(new Date().getFullYear() + 1))
LucasM

206

Это создаст Dateровно один год в будущем всего с одной строкой. Сначала мы получаем fullYearот a new Date, увеличиваем его, устанавливаем как год a new Date. Вы можете подумать, что на этом все закончилось, но если мы остановимся, он вернет метку времени, а не Dateобъект, поэтому мы оборачиваем все это в Dateконструктор.

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

13
setYear()является устаревшим , setFullYear()вместо него следует использовать.
tsauerwein

1
Один лайнер без промежуточных переменных для размещения! Превосходно!
theUtherSide

1
это не будет обрабатывать часы, минуты и секунды, оно будет установлено на текущее время
Дирадж

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

И вот 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.