Как добавить недели к дате с помощью javascript?
Javascript определенно не мой самый сильный момент. Я пытался это сделать уже пару часов и, похоже, где-то застрял в форматировании даты.
У меня есть форма, в которой пользователь выбрал дату (dd/mm/yyyy), а затем эту дату будет взят, и к ней добавятся 2 недели, а затем дата будет скопирована в другое поле формы.
Моя последняя попытка, приведенная ниже, даже не добавляет дату, но просто копирует выбранную дату в одном поле формы в другой, если я выбираю '03/02/2012 ', он выводит "Fri Mar 02 2012 00:00:00 GMT + 0000 (GMT стандартное время), поэтому его вывод в американском формате, а также полная дата. Как мне получить его в том же формате и добавить 2 недели?
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
document.frmAccept.acceptLicence.value = date1;
}
Ответы
Ответ 1
Вы можете сделать это:
let numWeeks = 2;
let now = new Date();
now.setDate(now.getDate() + numWeeks * 7);
alert(now);
Вы можете увидеть скрипку здесь.
Согласно документации в MDN
Метод setDate() устанавливает день объекта Date относительно начала текущего установленного месяца.
Ответ 2
Вы назначаете date1
для объекта Date, который представляет строку, которую вы передаете. То, что вы видите в значении acceptLicense
, является представлением toString()
объекта даты (попробуйте alert(date1.toString())
, чтобы увидеть это).
Для вывода, как вы хотите, вам потребуется использовать конкатенацию строк и различные методы Date
.
var formattedDate = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
С точки зрения добавления 2 недель вы должны добавить 14 дней к текущей дате;
date1.setDate(date.getDate() + 14);
... это автоматически обработает увеличение месяца и т.д.
В итоге вы получите:
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
N.B Месяцы в JavaScript индексируются 0 (Jan = 0, Dec = 11), поэтому +1
в месяц.
Изменить. Чтобы ответить на ваш комментарий, вы должны построить Date
следующим образом, поскольку аргумент Date
должен быть "Строкой, представляющей дату RFC2822 или ISO 8601". (см. здесь).
var segments = acceptCompletionDate.split("/");
var date1 = new Date(segments[2], segments[1], segments[0]);
Ответ 3
Это может не ответить на вопрос как таковой, но можно найти решение с помощью этих формул.
6.04e+8
= 1 неделя в миллисекундах
Date.now()
= Сейчас в миллисекундах
Date.now() + 6.04e+8
= 1 неделя с сегодняшнего дня
Date.now() + (6.04e+8 * 2)
= 2 недели с сегодняшнего дня
new Date( Date.now() + (6.04e+8 * 2) )
= Дата Объект в течение 2 недель с сегодняшнего дня
Ответ 4
var d = new Date("2019-08-01");
d.setDate(d.getDate()+parseInt(7));
здесь 7 - дни, которые вы хотите добавить в дату
Ответ 5
Это должно делать то, что вы ищете.
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14);
document.frmAccept.acceptLicence.value = date1.getDate() + '/' + (date1.getMonth() + 1) + '/' + date1.getFullYear();
}
Ответ 6
Чтобы проанализировать конкретный формат dd/mm/yyyy
и увеличивать число дней с помощью 14, вы можете сделать что-то вроде разделения частей и создать объект даты с y/m/d, заданный с определенной точностью. (сразу увеличивая количество дней). Предоставление разделителя всегда -
, следующее должно работать:
function LicenceToOccupy(acceptCompletionDate)
{
var parts = acceptCompletionDate.split("/");
var date1 = new Date(parts[2], (parts[1] - 1), parseInt(parts[0]) + 14); //month 0 based, day: parse to int and increment 14 (2 weeks)
document.frmAccept.acceptLicence.value = date1.toLocaleDateString(); //if the d/m/y format is the local string, otherwise some cusom formatting needs to be done
}
Ответ 7
Только некоторые минимальные изменения в Toast отвечают, и вы получите точный формат, который вы ищете dd/mm/yyyy:
function LicenceToOccupy(acceptCompletionDate)
{
var date1 = new Date(acceptCompletionDate);
date1.setDate(date1.getDate() + 14); //This adds the two weeks
var day = date1.getDate() 9 10 ? date1.getDate() : '0' + date1.getDate();
var month = date1.getMonth() >= 9 ? date1.getMonth() + 1: '0' + date1.getMonth();
document.frmAccept.acceptLicence.value = day + '/' + month + '/' + date1.getFullYear();
}
Ответ 8
Все там!
date1.toLocaleDateString()
Это вернет вам date1 как строку в клиентском соглашении
Чтобы создать новую дату date2 с еще 2 неделями (2weeks = 2 * 7 * 24 * 60 * 60 секунд):
var date2 = new Date(date1 + 60*60*24*7*2);