Вычесть дни, месяцы, годы с даты в JavaScript
Кто-нибудь знает простой способ принять дату (например, сегодня) и вернуться через X дней, X месяцев и X лет?
Я пробовал:
var date = new Date();
$("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1));
Но я получил отрицательную дату, например, сегодня выход был:
3/-3/2015
Любые советы?
Спасибо.
Ответы
Ответ 1
Вы просто уменьшаете значения из числа. Таким образом, вычитание 6 из 3 (дата) вернет только -3.
Вам нужно индивидуально добавить/удалить единицу времени в объекте даты
var date = new Date();
date.setDate( date.getDate() - 6 );
date.setFullYear( date.getFullYear() - 1 );
$("#searchDateFrom").val((date.getMonth() ) + '/' + (date.getDate()) + '/' + (date.getFullYear()));
Ответ 2
Как говорили другие, вы вычитаете из числовых значений, возвращаемых из таких методов, как date.getDate()
, вам нужно reset те значения в вашей переменной даты. Я создал метод ниже, который сделает это за вас. Он создает дату с использованием new Date()
, которая будет инициализироваться с текущей датой, затем устанавливает дату, месяц и год в соответствии со значениями, переданными в. Например, если вы хотите вернуться на 6 дней, тогда перейдите в -6, как это var newdate = createDate(-6,0,0)
. Если вы не хотите устанавливать значение в ноль (или вы можете установить значения по умолчанию). Метод вернет вам новую дату (протестирован в Chrome и 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;
}
Ответ 3
Я бы рекомендовал использовать библиотеки MomentJS. Они делают все взаимодействия с Датами намного проще.
Если вы используете Moment, ваш код будет таким же простым, как это:
var today = moment();
var nextMonth = today.add('month', 1);
Вы можете найти MomentJS здесь: http://momentjs.com/
UPDATE:
В JavaScript функция Date.getDate() возвращает текущий день месяца с 1-31. Вы вычитаете 6 из этого числа, и в настоящее время это 3-е число месяца. Это приносит значение -3.
Ответ 4
Это чисто функция, которая принимает переданную дату начала, основываясь на ответе Фила:
function deltaDate(input, days, months, years) {
var date = new Date(input);
date.setDate(date.getDate() + days);
date.setMonth(date.getMonth() + months);
date.setFullYear(date.getFullYear() + years);
return date;
}
например, записывает дату месяц назад в консольный журнал:
console.log(deltaDate(new Date(), 0, -1, 0));
Обратите внимание, что это работает, даже если вы идете после конца месяца или года.
Ответ 5
Используйте библиотеку moment.js для управления временем и датами.
import moment = require('moment');
const now = moment();
now.subtract('seconds', 7); // takes 7 seconds of the current time
now.subtract('days', 7); // takes 7 days of the current date
now.subtract('months', 7); // takes 7 months of the current date
now.subtract('years', 7); // takes 7 years of the current date
Ответ 6
Это не дает полного ответа на вопрос, но для тех, кто может рассчитать количество дней, на которое они хотели бы сместить начальную дату, будет работать следующий метод:
myDate.setUTCDate(myDate.getUTCDate() + offsetDays);
offsetDays может быть положительным или отрицательным, и результат будет правильным для любой заданной начальной даты с любым заданным смещением.