Ответ 1
Вы должны использовать getFullYear()
вместо getYear()
. getYear()
возвращает фактический год минус 1900 (и поэтому бесполезен).
Я пытаюсь получить год с даты, и он не работает.
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.
Спасибо!
Вы должны использовать getFullYear()
вместо getYear()
. getYear()
возвращает фактический год минус 1900 (и поэтому бесполезен).
Это создаст Date
ровно один год в будущем только с одной строкой. Сначала мы получаем fullYear
от a new Date
, увеличиваем его, устанавливаем в качестве года new Date
. Вы могли бы подумать, что мы это сделаем, но если мы остановимся, он вернет метку времени, а не объект Date
, поэтому мы завершим все это в конструкторе Date
.
new Date(new Date().setFullYear(new Date().getFullYear() + 1))
Поскольку 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(...)
Используя некоторые ответы на этой странице и здесь, я придумал свой собственный ответ, поскольку ни один из этих ответов полностью не решил его для меня.
Вот суть
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/
Использовать этот:
var startDate = new Date();
startDate.setFullYear(startDate.getFullYear() - 1);
Используйте setFullyear, как и другие, но знаете, что возвращает значение timestamp, а не объект даты. Это также хороший кандидат 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));
Я придумал прямое решение которое учитывает високосные годы.
Например:
var originalDate = new Date('February 29th, 2016 12:00:00');
var newDate = dateAdd(originalDate, 1, 'years'); // => 'February 28th, 2017
Это также работает с другими единицами времени, такими как дни, недели, месяцы и т.д.
Очень просто. используйте этот код.
// 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);" />