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

Вопрос:Кто-нибудь знает простой способ принять дату (например, сегодня) и вернуться через X дней, X месяцев и X лет? Я пробовал: var date = new Date(); $("#searchDateFrom").val((date.getMonth() -1 ) + '/' + (date.getDate() - 6) + '/' + (date.getFullYear() - 1)); Но я получил отрицательную дату, например, сегодня выход был: 3/-3/2015 Любые советы? Спасибо. Лучший ответ:

Вопрос:

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

Оцените статью
Добавить комментарий