var d = new Date();
d.setMonth(d.getMonth() - 3);
Это работает на январь. Запустите этот фрагмент:
var d = new Date("January 14, 2012");
console.log(d.toLocaleDateString());
d.setMonth(d.getMonth() - 3);
console.log(d.toLocaleDateString());
Есть некоторые предостережения ...
Месяц это любопытная вещь. Как вы определяете 1 месяц? 30 дней? Большинство людей скажут , что один месяц назад средства в тот же день месяца , в предыдущем месяце цитации . Но более половины времени, то есть 31 день назад, а не 30. И если сегодня 31 число месяца (а это не август или декабрь), то этот день месяца не существует в предыдущем месяце.
Интересно, что Google соглашается с JavaScript, если вы спросите его, какой день за месяц до следующего :
В нем также говорится, что один месяц длится 30,4167 дней :
Итак, один месяц до 31 марта совпадает с днем до 28 марта, 3 днями ранее? Все зависит от того, что вы подразумеваете под «месяцем ранее». Поговорите с владельцем вашего продукта.
Если вы хотите сделать то же, что и momentjs, и исправить эти ошибки в последний день месяца, перейдя к последнему дню месяца, вы можете сделать что-то вроде этого:
const d = new Date("March 31, 2019");
console.log(d.toLocaleDateString());
const month = d.getMonth();
d.setMonth(d.getMonth() - 1);
while (d.getMonth() === month) {
d.setDate(d.getDate() - 1);
}
console.log(d.toLocaleDateString());
Если ваши требования сложнее, используйте математику и напишите немного кода. Вы разработчик! Вам не нужно устанавливать библиотеку! Вам не нужно копировать и вставлять из stackoverflow! Вы можете разработать код самостоятельно, чтобы делать именно то, что вам нужно!
Я рекомендую использовать библиотеку под названием Moment.js.
Он хорошо протестирован, работает на разных браузерах и на стороне сервера (я использую его как в проектах Angular, так и в Node). Имеет большую поддержку дат локали.
http://momentjs.com/
.format()
возвращает строковое представление даты , отформатированный в ISO 8601 формате. Вы также можете использовать его с пользовательским форматом даты, например так:.format('dddd, MMMM Do YYYY, h:mm:ss a')
источник
«Один вкладыш» (на много строк для удобного чтения), который нужно поместить непосредственно в переменную:
источник
Чтобы упростить задачу, вы можете использовать DateJS, библиотеку дат для JavaScript:
http://www.datejs.com/
Пример кода для вас:
источник
Это должно обрабатывать сложение / вычитание, просто положить отрицательное значение для вычитания и положительное значение для добавления. Это также решает проблему пересечения месяцев.
источник
Если
setMonth
метод, предложенный gilly3, не тот, который вам нужен, подумайте:Может быть использован в течение любого количества времени, просто установите правильные кратные.
источник
Date
Несмотря на то, что класс слаб , и хотя Date.js предпочтителен, он, по крайней мере, моделирует мягкий пролептический календарь, который достаточно хорош для случайного использования.setTime()
?Мне нравится простота ответа gilly3 , но пользователи, вероятно, будут удивлены тем, что месяц до 31 марта - 3 марта. Я решил внедрить версию, которая будет работать до конца месяца, поэтому за месяц до 28, 29, 30 марта, и 31 все будет 28 февраля, когда это не високосный год.
источник
Уже есть элегантный ответ, но я считаю, что его трудно читать, поэтому я сделал свою собственную функцию. Для моих целей я не нуждался в отрицательном результате, но это не было бы трудно изменить.
источник
источник
Это самый маленький и простой код.
Объявите переменную с текущей датой. затем, просто используя встроенную функцию setMonth, мы можем получить 3 месяца назад.
источник
В моем случае мне нужно было вычесть 1 месяц до текущей даты. Важной частью был номер месяца, поэтому не важно, в каком дне текущего месяца вы находитесь, мне нужно было в прошлом месяце. Это мой код:
Вычитать 1 месяц из фактической даты не точно, поэтому в первую очередь я устанавливаю первый день месяца (первый день любого месяца всегда является первым днем), а во вторую очередь я вычитаю 1 день, который всегда отправляет вас в последний месяц. Надеюсь помочь тебе чувак.
источник
источник
Передайте объект JS Date и целое число от того, сколько месяцев вы хотите добавить / вычесть.
monthsToAdd
может быть положительным или отрицательным. Возвращает объект даты JS.Если ваш
originalDateObject
31 марта, и вы передаете -1 какmonthsToAdd
, то ваша дата выхода будет 28 февраля.Если вы проведете большое количество месяцев, скажем, 36, он также будет корректно корректировать год.
источник
источник
источник