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

Datatables v1.10日期格式化为dd/mm/yyyy h:i:s失败求助

解决Datatables v1.10日期格式化错误的问题

嘿,我完全懂你现在的烦躁——明明接口返回的是2011-03-07 16:12:39这种标准的YYYY-MM-DD HH:mm:ss格式,想转成dd/mm/yyyy h:i:s,结果所有日期都变成了7-2-2011,连时间都没了,这肯定是哪里的逻辑出了问题。我帮你拆解下问题,再给你靠谱的解决方案。

你之前出错的核心原因

大概率是你在日期解析或格式化时搞混了月份和日期的顺序,或者没有正确处理时间部分。比如:

  • 直接用new Date(data)时,部分浏览器对YYYY-MM-DD HH:mm:ss的解析存在兼容性问题,导致日期对象创建错误;
  • 格式化时错误地把日期(day)放在了月份(month)的位置,或者忘记给月份加1(因为JS的Date对象月份是从0开始的);
  • 没有提取时间部分,只格式化了日期,导致时间丢失,还把日期月份搞反了。

正确的实现方案(原生JS版,无需额外库)

直接在Datatables的columns.render里写自定义逻辑,先正确解析日期,再按要求格式化:

$('#your-table-id').DataTable({
  // 其他配置项...
  columns: [
    // 其他列配置...
    {
      data: 'date_field_name', // 替换成你接口返回的日期字段名
      render: function(data, type, row) {
        // 空值处理
        if (!data || data === '') return '';
        
        // 拆分日期和时间部分
        const [dateStr, timeStr] = data.split(' ');
        const [year, month, day] = dateStr.split('-').map(Number);
        const [hours, minutes, seconds] = timeStr.split(':').map(Number);
        
        // 创建正确的Date对象:注意JS月份是0-11,所以要减1
        const dateObj = new Date(year, month - 1, day, hours, minutes, seconds);
        
        // 格式化成dd/mm/yyyy h:i:s,补零保证两位格式
        const formattedDay = String(dateObj.getDate()).padStart(2, '0');
        const formattedMonth = String(dateObj.getMonth() + 1).padStart(2, '0'); // 加1转回实际月份
        const formattedYear = dateObj.getFullYear();
        const formattedHours = String(dateObj.getHours()).padStart(2, '0');
        const formattedMinutes = String(dateObj.getMinutes()).padStart(2, '0');
        const formattedSeconds = String(dateObj.getSeconds()).padStart(2, '0');
        
        return `${formattedDay}/${formattedMonth}/${formattedYear} ${formattedHours}:${formattedMinutes}:${formattedSeconds}`;
      }
    }
    // 其他列配置...
  ]
});

更简洁的方案(用Moment.js)

如果你项目里已经引入了Moment.js,那代码会简单很多,它能完美处理各种日期格式的解析和格式化:

$('#your-table-id').DataTable({
  // 其他配置项...
  columns: [
    // 其他列配置...
    {
      data: 'date_field_name',
      render: function(data, type, row) {
        return data ? moment(data).format('DD/MM/YYYY HH:mm:ss') : '';
      }
    }
    // 其他列配置...
  ]
});

验证下效果

用你给出的测试日期2011-03-07 16:12:39,上面两种方案都会输出07/03/2011 16:12:39,完全符合你的需求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:59:28