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

Chrome扩展内容脚本中日期格式转换问题求助

日期格式转换与代码集成问题解决

问题场景

我编写了用于创建表格并插入日期与价格的createTable函数:

function createTable({ data, propertyId }) {
  const table = createElement({
    tag: 'table',
    id: `p-${propertyId}`,
    border: '1',
  });

  const tableHeader = createElement({
    tag: 'caption',
    innerText: 'Table title',
  });

  const tableBody = createElement({
    tag: 'tbody',
  });

  //order dates so that most recent is displayed last
  data
    .sort((prev, current) => {
      const prevDate = prev['date_created'].replace('/', '-').replace('/', '-');
      const currentDate = current['date_created']
        .replace('/', '-')
        .replace('/', '-');
      return new Date(prevDate) - new Date(currentDate);
    })
    .forEach((item) => {
      const row = createElement({
        tag: 'tr',
      });

      const date = createElement({
        tag: 'td',
        innerHTML: item.date_created,
      });

      const price = createElement({
        tag: 'td',
        innerHTML: item.price,
      });

      row.append(date, price);
      tableBody.append(row);
    });

  table.append(tableHeader, tableBody);
  return table;
}

当前日期格式为YYYY/MM/DD,我需要将其转换为DD/MM/YYYY格式。自己编写了日期转换函数,但集成后输出结果为undefined/undefined/22/11/06,无法正确实现转换。我的转换函数如下:

function reformatDate(dateStr) {
  var dArr = dateStr.split('-'); // ex input: "2010-01-18"
  return dArr[2] + '/' + dArr[1] + '/' + dArr[0].substring(2); //ex output: "18/01/10"
}

问题原因

你的转换函数使用-作为分割符,但原始日期格式是用/分隔的(比如2022/11/06),调用split('-')后只会得到一个包含完整日期字符串的数组["2022/11/06"],导致dArr[1]和dArr[2]都是undefined,拼接后就出现了错误的输出结果。


修正方案

1. 修复日期转换函数

将分割符改为/,并调整拼接逻辑以输出DD/MM/YYYY格式:

function reformatDate(dateStr) {
  // 输入格式: YYYY/MM/DD,例如"2022/11/06"
  const dArr = dateStr.split('/');
  // 输出DD/MM/YYYY格式
  return `${dArr[2]}/${dArr[1]}/${dArr[0]}`;
  // 若需要年份仅保留后两位,可替换为以下代码
  // return `${dArr[2]}/${dArr[1]}/${dArr[0].substring(2)}`;
}

2. 集成到原代码中

在forEach循环里调用修正后的转换函数,替换原有的日期赋值逻辑:

// 替换原forEach中的日期创建代码
.forEach((item) => {
  const row = createElement({
    tag: 'tr',
  });

  const reformattedDate = reformatDate(item.date_created);
  const date = createElement({
    tag: 'td',
    innerHTML: reformattedDate,
  });

  const price = createElement({
    tag: 'td',
    innerHTML: item.price,
  });

  row.append(date, price);
  tableBody.append(row);
});

3. 可选:简化排序逻辑的日期处理

排序部分的日期转换可以优化,直接通过分割重组生成Date可识别的格式:

.sort((prev, current) => {
  const parseDate = (dateStr) => {
    const [year, month, day] = dateStr.split('/');
    return new Date(`${year}-${month}-${day}`);
  };
  return parseDate(prev.date_created) - parseDate(current.date_created);
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 17:15:54