У меня есть следующий массив дат. Как я могу отформатировать каждую дату в этом массиве как «мм/дд/гггг»?
Я пытаюсь что-то подобное, но форматирование неправильное.
const formattedDates = this.displayEffectiveDate.map(date => new Date(date));
[ "2024-02-29T00:00:00", "2024-03-31T00:00:00" ]
[ 2024-02-29T00:00:00, 2024-03-31T00:00:00 ]
недействителен JSON или JavaScript. «неправильно форматирует» на самом деле не говорит нам о том, что происходит, пожалуйста, будьте как можно подробнее в вопросе.
Проверьте toLocaleString с локалью «us-en».
Это может быть просто манипуляция строками. [ "2024-02-29T00:00:00", "2024-03-31T00:00:00" ].map(s => s.replace(/(....)-(..)-(..).*/, "$2/$3/$1"));
делает то, что вам нужно?
Вы можете использовать toLocaleDateString()
, чтобы получить результат в свою пользу.
См. код ниже:
const displayEffectiveDate = [ "2024-02-29T00:00:00", "2024-03-31T00:00:00" ];
const formattedDates = displayEffectiveDate.map(date => {
const formattedDate = new Date(date).toLocaleDateString('en-US', {
month: '2-digit',
day: '2-digit',
year: 'numeric'
});
return formattedDate;
});
console.info(JSON.stringify(formattedDates));
Ах, ответ на самом деле форматирует даты, а не манипулирует строками. Обратите внимание на комментарий о повторном использовании объекта формата здесь, если производительность имеет значение.
Вы можете использовать объект Date
, а затем использовать для этого метод следующим образом:
function dateToMDY(date) {
var d = date.getDate();
var m = date.getMonth() + 1; //Month from 0 to 11
var y = date.getFullYear();
return (m<=9 ? '0' + m : m) + '/' + (d <= 9 ? '0' + d : d) + "/" + y;
}
var dates = [ "2024-02-29T00:00:00", "2024-03-31T00:00:00" ];
console.info(dates.map(d => dateToMDY(new Date(d))));
Мне кажется, что это всего лишь вопрос манипуляций со строками, для которых не нужно создавать объекты Date:
const dates = [ "2024-02-29T00:00:00", "2024-03-31T00:00:00" ];
const result = dates.map(s => s.replace(/(....)-(..)-(..).*/, "$2/$3/$1"));
console.info(result);
Попробуй это
let array = [ '2024-02-29T00:00:00', '2024-03-31T00:00:00' ]
for(let i = 0; i<array.length; i++){
const a = array[i].split('-', 3)
const day = a[2].split('T', 1)[0]
const month = a[1]
const year = a[0]
const mmddyyyy = `${month}-${day}-${year}`
array[i] = mmddyyyy
}
console.info(array)
Если ваш displayEffectiveDate
выглядит так:
this.displayEffectiveDate = ["2024-02-29T00:00:00", "2024-03-31T00:00:00"];
Вы можете создать новый объект Date
из строки даты ISO 8601.
d.getMonth() + 1
чтобы получить месяц
d.getDate()
на день
d.getFullYear()
на год
String(...).padStart(2, '0')
чтобы месяц и день всегда были двузначными
Это должно выглядеть так:
this.displayEffectiveDate = ["2024-02-29T00:00:00", "2024-03-31T00:00:00"];
const formattedDates = this.displayEffectiveDate.map(date => {
const d = new Date(date);
const month = String(d.getMonth() + 1).padStart(2, '0'); // Months are 0-indexed, so we add 1
const day = String(d.getDate()).padStart(2, '0');
const year = d.getFullYear();
return `${month}/${day}/${year}`;
});
Результат будет [ '02/29/2024', '03/31/2024' ]
Вы сопоставляете новую дату, а не форматируете ее stackoverflow.com/questions/3552461/…