Изменение даты ISO на короткую дату JavaScript

В настоящее время у меня есть настройка функции, чтобы получить следующие две недели или месяцы с выбранной даты из поля даты ввода. Однако проблема, с которой я столкнулся, заключается в том, что я хочу получить дату для вывода 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>
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
1
0
558
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

Вы можете использовать библиотеку 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');

Можете ли вы добавить рабочий пример, поскольку, когда я использовал его в своем коде, я не получил никаких изменений.

Matt Hutch 01.06.2018 14:09
Ответ принят как подходящий

Вместо 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')

Я добавил обновление к основному посту, так как не знаю почему, но оно не дает никаких дополнительных результатов, оно все равно выводит дату.

Matt Hutch 01.06.2018 14:13

Это должен быть date1 = moment(dateSelected).format('DD/MM/YYYY');

MenuItem42 01.06.2018 14:15

Во-первых, вы устанавливаете входное значение на текущую дату прямо здесь

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>

Другие вопросы по теме