Я пытаюсь преобразовать/изменить дату своего блога с MM/DD/YYYY на дату месяца, год. Например, эта дата 12.11.2018 преобразуется в 12 ноября 2018 года. Есть ли способ сделать это правильно?
Я пробовал код, который должен работать. Однако код преобразовал/изменил дату каждого сообщения в блоге на последние опубликованные сообщения (дата).
Я пробовал этот код:
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var data = $('.date-text').text();
var arr = data.split('/');
$(".date-text").html(months[parseInt(arr[0]) - 1] + " " + arr[1] + ", " + arr[2]);
и код преобразовал все даты в дату последних опубликованных сообщений, которая теперь отображается как 12 ноября 2018 г. 11.
Рабочий редактор: https://jsfiddle.net/s1b2fenk/
Изображение сайта после изменения даты:
Вы знаете о moment.js или date-fns? Это сделает это за вас.
В любом случае ваша проблема, безусловно, связана с тем, как вычисляются «данные». (и это не объясняется в вашем фрагменте кода). Вы можете использовать console.info(data, arr), чтобы проверить их значение.
это потому, что есть много div с одинаковым именем класса, и когда вы это сделаете, он изменит все div с одним и тем же именем класса. вы можете попробовать указать разные классы или изменить содержимое json при получении данных с сервера.
This is by using pure javascript and jQuery. This code does not require any other library except jquery.
<div class = "date-text-1">
11/12/2018
</div>
<div class = "date-text-2">
10/1/2018
</div>
<div class = "Converted-1">
</div>
<div class = "Converted-2">
</div>
This is javascript:
$(document).ready(function() {
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var data1 = $('.date-text-1').text();
var converteddate1=new Date(data1);
var formatedDate1=months[converteddate1.getMonth()]+' '+converteddate1.getDate()+','+converteddate1.getFullYear();
$('.Converted-1').text(formatedDate1);
var data2 = $('.date-text-2').text();
var converteddate2=new Date(data2);
var formatedDate2=months[converteddate2.getMonth()]+' '+converteddate2.getDate()+','+converteddate2.getFullYear();
$('.Converted-2').text(formatedDate2);
});
Ваша проблема в том, что в jQuery:
$(".date-text").html(...);
изменяет HTML всех элементов, выбранных .дата-текст, на одно и то же значение, поэтому все они в конечном итоге показывают одну и ту же дату.
Вы можете использовать метод jQuery .каждый примерно так:
$(".date-text").each(function (){
var months = ["January", "February", "March", "April",
"May", "June", "July", "August",
"September", "October", "November", "December"];
var arr = this.textContent.split('/');
this.textContent = months[parseInt(arr[0]) - 1] + " " + arr[1] + ", " + arr[2];
});
<script src = "https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class = "date-text">11/12/2018</div>
<div class = "date-text">10/1/2018</div>
Возможно, вам будет проще использовать POJS:
window.addEventListener('DOMContentLoaded', function () {
document.querySelectorAll('.date-text').forEach(el => el.textContent = formatDateString(el.textContent))
}, false);
function formatDateString(s) {
var months = ["January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var arr = s.split('/');
return months[arr[0] - 1] + " " + arr[1] + ", " + arr[2];
}
<div class = "date-text">11/12/2018</div>
<div class = "date-text">10/1/2018</div>
Код работает потрясающе! Спасибо за вашу добрую работу :)
Это должен быть комментарий, это не ответ.