В настоящее время у меня есть настройка функции, чтобы получить следующие две недели или месяцы с выбранной даты из поля даты ввода. Однако проблема, с которой я столкнулся, заключается в том, что я хочу получить дату для вывода DD / MM / YYYY, но я получаю полную дату ISO, где мне нужно короткое. Кто-нибудь знает, как я могу это сделать?
Обновлено:
Я добавил moment(date1).format('DD/MM/YYYY'); для проверки кода, но это не дало никаких результатов.
function submit() {
var type = document.getElementById("selectType").value;
var dateSelected = document.getElementById('datePicker').valueAsDate = new Date();
if (type === "Months") {
document.getElementById("pWeeks").className = "hidden";
document.getElementById("pMonths").className = "";
var date1 = dateSelected;
moment(date1).format('DD/MM/YYYY');
var date2 = new Date(date1);
date2.setMonth(date2.getMonth() + 1);
document.getElementById("pM1").innerHTML = date1;
document.getElementById("pM2").innerHTML = date2;
} else {
document.getElementById("pWeeks").className = "";
document.getElementById("pMonths").className = "hidden";
var date1 = dateSelected;
var date2 = new Date(date1);
date2.setDate(date2.getDate() + 7);
document.getElementById("pW1").innerHTML = date1;
document.getElementById("pW2").innerHTML = date2;
}
}.hidden {
display: none;
}<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.18.1/moment.min.js"></script>
<input type = "date" id = "datePicker"><br>
<select id = "selectType">
<option value = "Months">Months</option>
<option value = "Weeks">Weeks</option>
</select><br>
<button id = "submit" onclick = "submit()">Submit</button>
<div id = "pMonths" class = "">
<p id = "pM1"></p>
<p id = "pM2"></p>
</div>
<div id = "pWeeks" class = "">
<p id = "pW1"></p>
<p id = "pW2"></p>
</div>


![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать библиотеку MomentJS, чтобы упростить задачу:
Включите библиотеку:
<script src = "https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.14.1/moment.min.js"></script>
document.getElementById("pM1").innerHTML = moment(date1).format('DD/MM/YYYY');
document.getElementById("pM2").innerHTML = moment(date2).format('DD/MM/YYYY');
а в остальном:
document.getElementById("pW1").innerHTML = moment(date1).format('DD/MM/YYYY');
document.getElementById("pW2").innerHTML = moment(date2).add(1, 'week').format('DD/MM/YYYY');
Вместо document.getElementById("pM1").innerHTML = date1; вы должны сначала построить строку с методами, предоставляемыми объектом даты (getFullYear, getDate, getMonth; см. документ). Затем вы можете назначить строку для innerHtml.
Если вы можете использовать moment.js, тогда ваш код, который вы назначаете своему innerHtml, - date1 = moment(dateSelected).format('DD/MM/YYYY')
Также я бы порекомендовал способ Луки:
As for converting the Dates, I would use Date.prototype.toLocaleDateString() passing "en-US"
который будет смотреть на ваш код:
dateSelected.toLocaleDateString('en-US')
Я добавил обновление к основному посту, так как не знаю почему, но оно не дает никаких дополнительных результатов, оно все равно выводит дату.
Это должен быть date1 = moment(dateSelected).format('DD/MM/YYYY');
Во-первых, вы устанавливаете входное значение на текущую дату прямо здесь
var dateSelected = document.getElementById('datePicker').valueAsDate = new Date();
не делайте этого, это в первую очередь противоречит цели наличия селектора.
Что касается преобразования дат, я бы использовал Date.prototype.toLocaleDateString(), передав "en-US" в качестве локали:
console.info((new Date()).toLocaleDateString('en-US')); // format MM/DD/YYYЯ также исправил, как вы устанавливаете новые даты, теперь это занимает одну дату и добавляет либо один и два месяца, либо одну и к неделям вместо none, и один месяц, и none, и одну неделю ;-)
function submit() {
var type = document.getElementById("selectType").value;
var dateSelected = document.getElementById('datePicker').valueAsDate;
if (type === "Months") {
document.getElementById("pWeeks").className = "hidden";
document.getElementById("pMonths").className = "";
var date1 = dateSelected;
var datePlusOne = new Date(date1);
datePlusOne.setMonth(date1.getMonth() + 1);
var datePlusTwo = new Date(date1);
datePlusTwo.setMonth(date1.getMonth() + 2);
document.getElementById("pM1").innerHTML = datePlusOne.toLocaleDateString('en-US');
document.getElementById("pM2").innerHTML = datePlusTwo.toLocaleDateString('en-US');
} else {
document.getElementById("pWeeks").className = "";
document.getElementById("pMonths").className = "hidden";
var date1 = dateSelected;
var datePlusOne = new Date(date1);
datePlusOne.setDate(date1.getDate() + 7);
var datePlusTwo = new Date(date1);
datePlusTwo.setDate(date1.getDate() + 14);
document.getElementById("pW1").innerHTML = datePlusOne.toLocaleDateString('en-US');
document.getElementById("pW2").innerHTML = datePlusTwo.toLocaleDateString('en-US');
}
}.hidden {
display: none;
}<input type = "date" id = "datePicker"><br>
<select id = "selectType">
<option value = "Months">Months</option>
<option value = "Weeks">Weeks</option>
</select><br>
<button id = "submit" onclick = "submit()">Submit</button>
<div id = "pMonths" class = "">
<p id = "pM1"></p>
<p id = "pM2"></p>
</div>
<div id = "pWeeks" class = "">
<p id = "pW1"></p>
<p id = "pW2"></p>
</div>
Можете ли вы добавить рабочий пример, поскольку, когда я использовал его в своем коде, я не получил никаких изменений.