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

Как добавить недели к дате с помощью 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;

}
4b9b3361

Ответ 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);