如何在JavaScript中将"14.12.22 15:17"格式字符串转为可按秒排序的日期
日期字符串转时间戳实现按秒排序
你需要将"DD.MM.YY HH:MM"格式(比如"14.12.22 15:17")的字符串转为日期类型,进而通过时间戳实现按秒排序,下面结合你提供的代码分析并给出优化方案:
原代码逻辑说明
你写的toTimestamp函数核心思路是把自定义格式的日期字符串拆解重组为ISO标准格式,再通过Date对象获取时间戳,这个方向是对的:
- 用
.分割字符串得到日、月、带时间的年份部分 - 再用空格分割年份部分,拿到年份后两位和时分
- 拼接成
20YY-DD-MMTHH:MM:00格式的字符串,转成Date对象后取时间戳
不过原代码存在一些可以优化的地方,比如个位数日期/月的格式不规范、缺少错误校验,下面是优化后的版本:
优化后的代码
const toTimestamp = (strDate) => { // 用正则匹配验证输入格式是否符合DD.MM.YY HH:MM const dateMatch = strDate.match(/^(\d{1,2})\.(\d{1,2})\.(\d{2}) (\d{2}:\d{2})$/); if (!dateMatch) { throw new Error('输入日期格式错误,请使用「DD.MM.YY HH:MM」格式'); } // 解构匹配结果,为个位数的日、月补零,保证格式规范 const [, day, month, year, time] = dateMatch; const standardDateStr = `20${year}-${month.padStart(2, '0')}-${day.padStart(2, '0')}T${time}:00`; const timestamp = new Date(standardDateStr).getTime(); // 校验日期是否能被正确解析 if (isNaN(timestamp)) { throw new Error('该日期无法被正确解析,请检查输入'); } return timestamp; }; // 测试用例 console.log(toTimestamp('14.12.22 15:17')); // 输出对应时间戳 console.log(toTimestamp('4.12.22 15:17')); // 自动补零后正常解析
优化点说明
- 格式校验:用正则提前验证输入格式,避免不符合要求的字符串进入后续逻辑
- 补零处理:用
padStart为个位数的日、月补零,生成标准ISO格式字符串,提升不同环境下的解析兼容性 - 错误处理:在格式错误或日期解析失败时抛出明确错误,便于调试
实现按秒排序
拿到时间戳后,直接用数组的sort方法即可实现按时间排序(时间戳越小,时间越早):
const dateList = ['14.12.22 15:17', '4.12.22 15:17', '20.01.23 10:00']; // 按时间从小到大排序 const sortedDates = dateList.sort((a, b) => toTimestamp(a) - toTimestamp(b)); console.log(sortedDates);
内容的提问来源于stack exchange,提问作者Лунатик
相关产品推荐
相关产品推荐

