Подтвердить что ты не робот

Вычесть дни, месяцы, годы с даты в JavaScript

Кто-нибудь знает простой способ принять дату (например, сегодня) и вернуться через X дней, X месяцев и X лет?

Я пробовал:

var date = new Date();
$("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1));

Но я получил отрицательную дату, например, сегодня выход был:

3/-3/2015

Любые советы?

Спасибо.

4b9b3361

Ответ 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 может быть положительным или отрицательным, и результат будет правильным для любой заданной начальной даты с любым заданным смещением.