You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在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,提问作者Лунатик

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.08 02:45:23