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

非常规格式日期的排序及服务器端格式转换技术咨询

日期格式转换与排序解决方案

这问题我在项目里碰过好多次,刚好给你拆解清楚怎么处理~核心思路其实很简单:格式转换要先把字符串转成标准日期类型,再输出成目标格式;排序则必须依赖标准日期类型(不能直接排字符串),这样才能保证顺序正确。


一、日期格式转换

当前你的日期格式是 DD.MM.YYYY HH:mm(比如"14.01.1970 07:55"),要转成服务器端需要的格式,比如常见的 YYYY-MM-DD HH:mm:ss 或者 ISO 格式,下面分不同技术场景说明:

JavaScript(前端)

原生方法(无需第三方库)

手动拆分字符串解析成Date对象,再拼接成目标格式:

const originalDateStr = "14.01.1970 07:55";
// 拆分日期和时间部分
const [day, month, yearTime] = originalDateStr.split('.');
const [year, time] = yearTime.split(' ');
const [hour, minute] = time.split(':');

// 注意:JS的月份是0-based(0=1月),所以要减1
const dateObj = new Date(year, month - 1, day, hour, minute);

// 转成服务器需要的格式(这里示例是YYYY-MM-DD HH:mm:ss)
const formattedDate = `${dateObj.getFullYear()}-${String(dateObj.getMonth()+1).padStart(2, '0')}-${String(dateObj.getDate()).padStart(2, '0')} ${String(dateObj.getHours()).padStart(2, '0')}:${String(dateObj.getMinutes()).padStart(2, '0')}:00`;

用Day.js(更简洁)

Day.js是轻量级的日期处理库,比Moment.js更小巧:

import dayjs from 'dayjs';

const originalDateStr = "14.01.1970 07:55";
// 第一个参数是原字符串,第二个是原格式,最后用format输出目标格式
const formattedDate = dayjs(originalDateStr, 'DD.MM.YYYY HH:mm').format('YYYY-MM-DD HH:mm:ss');
// 把'YYYY-MM-DD HH:mm:ss'替换成服务器要求的格式即可

Python(后端)

用内置的datetime模块就能搞定:

from datetime import datetime

original_date_str = "14.01.1970 07:55"
# 先解析成datetime对象,第二个参数是原格式的匹配规则
parsed_date = datetime.strptime(original_date_str, "%d.%m.%Y %H:%M")
# 转成目标格式,这里示例是YYYY-MM-DD HH:mm:ss
formatted_date = parsed_date.strftime("%Y-%m-%d %H:%M:%S")

数据库(以MySQL为例)

如果数据存在数据库里,直接用SQL函数转换:

-- 先把字符串转成日期类型,再格式化为目标格式
SELECT DATE_FORMAT(STR_TO_DATE(your_date_column, '%d.%m.%Y %H:%i'), '%Y-%m-%d %H:%i:%s') AS formatted_date 
FROM your_table;
  • STR_TO_DATE:把字符串按指定格式解析成MySQL日期类型
  • DATE_FORMAT:把日期类型格式化为你需要的字符串格式

二、日期排序

重点:绝对不能直接对DD.MM.YYYY HH:mm这种字符串排序! 比如"14.01.1970"和"01.02.1970",字符串排序会认为前者更大,但实际日期后者更晚,必须转成标准日期类型(时间戳、datetime对象、数据库日期类型)后再排序。

JavaScript(前端数组排序)

原生方法

const dateList = ["14.01.1970 07:55", "01.02.1970 10:30", "31.12.1969 23:59"];

// 升序排序(从早到晚)
dateList.sort((a, b) => {
  // 封装一个解析函数
  const parseToDate = (str) => {
    const [day, month, yearTime] = str.split('.');
    const [year, time] = yearTime.split(' ');
    const [hour, minute] = time.split(':');
    return new Date(year, month - 1, day, hour, minute);
  };
  // Date对象相减会返回时间戳的差值,正的话b比a晚
  return parseToDate(a) - parseToDate(b);
});

// 降序排序的话,反转差值即可
dateList.sort((a, b) => parseToDate(b) - parseToDate(a));

用Day.js简化

dateList.sort((a, b) => {
  // valueOf()返回时间戳,直接比较差值
  return dayjs(a, 'DD.MM.YYYY HH:mm').valueOf() - dayjs(b, 'DD.MM.YYYY HH:mm').valueOf();
});

Python(后端列表排序)

用sort方法的key参数指定排序依据:

from datetime import datetime

date_list = ["14.01.1970 07:55", "01.02.1970 10:30", "31.12.1969 23:59"]

# 升序排序
date_list.sort(key=lambda x: datetime.strptime(x, "%d.%m.%Y %H:%M"))

# 降序排序,加reverse=True
date_list.sort(key=lambda x: datetime.strptime(x, "%d.%m.%Y %H:%M"), reverse=True)

数据库排序(MySQL)

如果存储的是字符串日期,先转成日期类型再排序:

-- 升序排序(从早到晚)
SELECT your_date_column 
FROM your_table 
ORDER BY STR_TO_DATE(your_date_column, '%d.%m.%Y %H:%i') ASC;

-- 降序排序
SELECT your_date_column 
FROM your_table 
ORDER BY STR_TO_DATE(your_date_column, '%d.%m.%Y %H:%i') DESC;

如果已经把日期转成数据库的DATETIME类型存储,直接排序更高效:

SELECT formatted_date 
FROM your_table 
ORDER BY your_date_column DESC;

内容的提问来源于stack exchange,提问作者John Bra

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 10:10:03