JS中如何将字符串日期转为Date对象并格式化排序?
解决方案
1. 关于是否需要转为Date对象
你拿到的是标准ISO 8601格式日期字符串,这种格式的字符串按字典序排序的结果和时间顺序完全一致,理论上可以直接对字符串数组排序。但为了逻辑更清晰、避免遇到非标准格式时出问题,更推荐转为Date对象后再排序,可靠性更高。
2. 数组排序实现
方式一:直接对字符串排序(简单但兼容性稍弱)
const dateStrings = ["2022-06-29T15:30:00+00:00", "2022-06-27T10:00:00+00:00", "2022-06-30T08:15:00+00:00"]; // 升序(从早到晚) const sortedAsc = dateStrings.sort((a, b) => a.localeCompare(b)); // 降序(从晚到早) const sortedDesc = dateStrings.sort((a, b) => b.localeCompare(a));
方式二:转为Date对象排序(推荐)
const dateStrings = ["2022-06-29T15:30:00+00:00", "2022-06-27T10:00:00+00:00", "2022-06-30T08:15:00+00:00"]; // 升序 const sortedAsc = dateStrings.sort((a, b) => new Date(a) - new Date(b)); // 降序 const sortedDesc = dateStrings.sort((a, b) => new Date(b) - new Date(a));
3. 日期格式转换为DD.MM.YYYY
方式一:直接拆分字符串(高效,适合固定ISO格式)
利用ISO字符串的固定结构直接提取年月日:
function formatToDDMMYYYY(dateStr) { // 截取YYYY-MM-DD部分并拆分 const [year, month, day] = dateStr.split('T')[0].split('-'); return `${day}.${month}.${year}`; } // 示例 console.log(formatToDDMMYYYY("2022-06-29T15:30:00+00:00")); // 输出 "29.06.2022"
方式二:通过Date对象处理(灵活,适配非固定格式)
如果后续可能遇到非标准日期格式,用Date对象提取更稳妥:
function formatToDDMMYYYY(dateStr) { const date = new Date(dateStr); // 补零确保是两位数字 const day = String(date.getDate()).padStart(2, '0'); const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份是0-11,需加1 const year = date.getFullYear(); return `${day}.${month}.${year}`; } // 示例 console.log(formatToDDMMYYYY("2022-06-29T15:30:00+00:00")); // 输出 "29.06.2022"
4. 组合操作:先排序再格式化
把排序和格式化结合,得到最终的结果数组:
const dateStrings = ["2022-06-29T15:30:00+00:00", "2022-06-27T10:00:00+00:00", "2022-06-30T08:15:00+00:00"]; // 先按时间升序排序 const sortedDates = dateStrings.sort((a, b) => new Date(a) - new Date(b)); // 再格式化每个日期 const result = sortedDates.map(formatToDDMMYYYY); console.log(result); // 输出:["27.06.2022", "29.06.2022", "30.06.2022"]
内容的提问来源于stack exchange,提问作者Alexandru Kullman
相关产品推荐
相关产品推荐

