Вопрос:
Кто-нибудь знает простой способ принять дату (например, сегодня) и вернуться через X дней, X месяцев и X лет?
Я пробовал:
var date = new Date(); $(«#searchDateFrom»).val((date.getMonth() -1 ) + ‘/’ + (date.getDate() — 6) + ‘/’ + (date.getFullYear() — 1));
Но я получил отрицательную дату, например, сегодня выход был:
3/-3/2015
Любые советы?
Спасибо.
Лучший ответ:
Вы просто уменьшаете значения из числа. Таким образом, вычитание 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())); Ответ №1
Как говорили другие, вы вычитаете из числовых значений, возвращаемых из таких методов, как 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; } Ответ №2
Я бы рекомендовал использовать библиотеки MomentJS. Они делают все взаимодействия с Датами намного проще.
Если вы используете Moment, ваш код будет таким же простым, как это:
var today = moment(); var nextMonth = today.add(‘month’, 1);
Вы можете найти MomentJS здесь: http://momentjs.com/
UPDATE:
В JavaScript функция Date.getDate() возвращает текущий день месяца с 1-31. Вы вычитаете 6 из этого числа, и в настоящее время это 3-е число месяца. Это приносит значение -3.
Ответ №3
Это чисто функция, которая принимает переданную дату начала, основываясь на ответе Фила:
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));
Обратите внимание, что это работает, даже если вы идете после конца месяца или года.
Ответ №4
Используйте библиотеку 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 Ответ №5
Это не дает полного ответа на вопрос, но для тех, кто может рассчитать количество дней, на которое они хотели бы сместить начальную дату, будет работать следующий метод:
myDate.setUTCDate(myDate.getUTCDate() + offsetDays);
offsetDays может быть положительным или отрицательным, и результат будет правильным для любой заданной начальной даты с любым заданным смещением.