如何格式化对象数组中的时间戳字段并保留数组结构?
格式化数组中对象的日期字段
推荐方案:创建新数组(不修改原数据)
这种方式能保留原始数组内容,避免后续操作意外影响原数据,用Array.map()遍历处理每个对象:
方式1:正则表达式提取重组
直接匹配原日期字符串中的关键部分,拼接成目标格式:
const myArray = [ { title: "one", location: "one", start_date_time: "2023-06-28T08:47:00.000Z" }, { title: "two", location: "two", start_date_time: "2023-06-28T08:47:00.000Z" } ]; const formattedArray = myArray.map(item => { // 匹配年、月、日、时、分 const dateMatch = item.start_date_time.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/); if (dateMatch) { return { ...item, // 复制原对象的其他字段 start_date_time: `${dateMatch[1]} ${dateMatch[2]} ${dateMatch[3]} ${dateMatch[4]}:${dateMatch[5]}` }; } return item; // 日期格式不匹配时返回原对象 }); console.log(formattedArray);
方式2:用Date对象格式化(处理时区更可靠)
如果需要考虑时区(原日期是UTC格式),用Date对象的UTC方法提取时间分量,再补零拼接:
const formattedArrayWithDate = myArray.map(item => { const date = new Date(item.start_date_time); const year = date.getUTCFullYear(); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); // 月份从0开始,需+1并补零 const day = String(date.getUTCDate()).padStart(2, '0'); const hours = String(date.getUTCHours()).padStart(2, '0'); const minutes = String(date.getUTCMinutes()).padStart(2, '0'); return { ...item, start_date_time: `${year} ${month} ${day} ${hours}:${minutes}` }; });
可选方案:直接修改原数组
如果不需要保留原始日期值,用Array.forEach()遍历更新原对象的字段:
myArray.forEach(item => { const dateMatch = item.start_date_time.match(/^(\d{4})-(\d{2})-(\d{2})T(\d{2}):(\d{2})/); if (dateMatch) { item.start_date_time = `${dateMatch[1]} ${dateMatch[2]} ${dateMatch[3]} ${dateMatch[4]}:${dateMatch[5]}`; } }); // 或用Date对象方式 myArray.forEach(item => { const date = new Date(item.start_date_time); const year = date.getUTCFullYear(); const month = String(date.getUTCMonth() + 1).padStart(2, '0'); const day = String(date.getUTCDate()).padStart(2, '0'); const hours = String(date.getUTCHours()).padStart(2, '0'); const minutes = String(date.getUTCMinutes()).padStart(2, '0'); item.start_date_time = `${year} ${month} ${day} ${hours}:${minutes}`; });
内容的提问来源于stack exchange,提问作者Papgooner
相关产品推荐
相关产品推荐

