当前位置: 首页 > 知识库问答 >
问题:

javascript - 怎么能取到createTime每个月有数据的那一天的日期显示在列名里啊?

闾丘玮
2024-12-11

怎么能取到createTime每个月有数据的那一天的日期显示在列名里啊
image.png

// 创建顶级列(月份列)
        const monthColumn = new TableColumn({
          title: monthName,
          type: "String",
          field: monthField,
          width: 100,
          children: [
            new TableColumn({
              title: this.dayTitle,
              type: "String",
              field: dayField,
              width: 100,
              options: { readOnlyCell: true },
              children: [
                new TableColumn({
                  title: "点检",
                  type: "String",
                  field: checkResultField,
                  options: {
                    selection: "checkResult",
                    itemProps: { code: "code", name: "label" },
                  },
                }),
                new TableColumn({
                  title: "处置",
                  type: "String",
                  field: checkHandleField,
                  classCode: "CHECK_HANDLE",
                  options: { multiple: true },
                }),
              ],
            }),
          ],
        });
        // 将月份列添加到表格列配置数组中
        tableColumns.push(monthColumn);
      }
      console.log("tableColumnssssssssss", tableColumns);
      return tableColumns;
},
sync fetchCurrentResult() {
      try {
        const result = await getCheckResultSummary({
          equipmentNumber: this.equipment.equipmentNumber,
          checkRange: this.currentYear,
        });
        console.log("result", result.data.data);
        // 使用 reduce 方法将结果数据转换为一个新的映射对象 summaryMap
        // 这个映射对象的键是设备项的名称(itemName),值是一个对象,该对象包含了检查时间和对应的检查结果
        // 检查结果按照月份进行组织,月份作为对象的键,检查结果作为值
        const summaryMap = result.data.data.reduce((result, item) => {
          if (item) {
            const { createTime, checkResult, checkHandle, itemName } = item;
            const record = result[itemName];
            if (!createTime) {
              return result;
            }
            if (record) {
              record["checkResult" + this.$moment(createTime).get("month")] =
                checkResult;
              record["checkHandle" + this.$moment(createTime).get("month")] =
                checkHandle;
              record[this.$moment(createTime).get("month")] =
                this.$moment(createTime).get("day");
            } else {
              result[itemName] = {
                ...item,
                ["checkResult" + this.$moment(createTime).get("month")]:
                  checkResult,
                ["checkHandle" + this.$moment(createTime).get("month")]:
                  checkHandle,
                [this.$moment(createTime).get("month")]:
                  this.$moment(createTime).get("day"),
              };
            }
          }
          return result;
        }, {});
        // 排序后更新表格数据
        console.log("summaryMap", summaryMap);
        this.tableData = Object.values(summaryMap).sort(
          (a, b) => a.seq - b.seq
        );

共有3个答案

司徒兴德
2024-12-11

async fetchCurrentResult() {
try {

const result = await getCheckResultSummary({
  equipmentNumber: this.equipment.equipmentNumber,
  checkRange: this.currentYear,
});
console.log("result", result.data.data);

// 使用 reduce 方法将结果数据转换为新的映射对象 summaryMap
const summaryMap = result.data.data.reduce((result, item) => {
  if (item) {
    const { createTime, checkResult, checkHandle, itemName } = item;
    const record = result[itemName];
    if (!createTime) {
      return result;
    }
    const month = this.$moment(createTime).get("month");
    const day = this.$moment(createTime).get("day");
    
    if (record) {
      record["checkResult" + month] = checkResult;
      record["checkHandle" + month] = checkHandle;
      record[month] = day;
    } else {
      result[itemName] = {
        ...item,
        ["checkResult" + month]: checkResult,
        ["checkHandle" + month]: checkHandle,
        [month]: day,
      };
    }
  }
  return result;
}, {});

console.log("summaryMap", summaryMap);

// 提取出所有有数据的月份和对应的日期
const monthsWithDays = Object.values(summaryMap).reduce((months, record) => {
  Object.keys(record).forEach(key => {
    if (key !== 'itemName' && key !== 'checkResult' && key !== 'checkHandle') {
      const month = parseInt(key, 10);
      if (!months.includes(month)) {
        months.push(month);
      }
    }
  });
  return months;
}, []);

// 创建表格列配置
const tableColumns = [];
monthsWithDays.forEach(month => {
  const monthName = this.$moment().month(month).format('MMMM'); // 获取月份名称
  const monthField = `month_${month}`; // 月份字段名
  const dayField = `day_${month}`; // 日期字段名
  const checkResultField = `checkResult${month}`;
  const checkHandleField = `checkHandle${month}`;

  // 创建顶级列(月份列)
  const monthColumn = new TableColumn({
    title: monthName,
    type: "String",
    field: monthField,
    width: 100,
    children: [
      new TableColumn({
        title: this.dayTitle,
        type: "String",
        field: dayField,
        width: 100,
        options: { readOnlyCell: true },
        children: [
          new TableColumn({
            title: "点检",
            type: "String",
            field: checkResultField,
            options: {
              selection: "checkResult",
              itemProps: { code: "code", name: "label" },
            },
          }),
          new TableColumn({
            title: "处置",
            type: "String",
            field: checkHandleField,
            classCode: "CHECK_HANDLE",
            options: { multiple: true },
          }),
        ],
      }),
    ],
  });

  // 将月份列添加到表格列配置数组中
  tableColumns.push(monthColumn);
});

// 打印最终的列配置
console.log("tableColumnssssssssss", tableColumns);
return tableColumns;

} catch (error) {

console.error("Error fetching data:", error);

}
}

梁丘霖
2024-12-11

主要区别:

1.新增了两个变量:month 和 day,分别用于存储月份和日期。
2.使用 format 方法:将月份和日期格式化为两位数的字符串。
3.新增了 day 字段:在 record 对象中添加了 day 字段,用于存储每个月有数据的那一天的日期。

// 创建顶级列(月份列)
const monthColumn = new TableColumn({
  title: monthName,
  type: "String",
  field: monthField,
  width: 100,
  children: [
    new TableColumn({
      title: this.dayTitle,
      type: "String",
      field: dayField,
      width: 100,
      options: { readOnlyCell: true },
      children: [
        new TableColumn({
          title: "点检",
          type: "String",
          field: checkResultField,
          options: {
            selection: "checkResult",
            itemProps: { code: "code", name: "label" },
          },
        }),
        new TableColumn({
          title: "处置",
          type: "String",
          field: checkHandleField,
          classCode: "CHECK_HANDLE",
          options: { multiple: true },
        }),
      ],
    }),
  ],
});
// 将月份列添加到表格列配置数组中
tableColumns.push(monthColumn);
console.log("tableColumnssssssssss", tableColumns);
return tableColumns;
}

async fetchCurrentResult() {
  try {
    const result = await getCheckResultSummary({
      equipmentNumber: this.equipment.equipmentNumber,
      checkRange: this.currentYear,
    });
    console.log("result", result.data.data);
    // 使用 reduce 方法将结果数据转换为一个新的映射对象 summaryMap
    // 这个映射对象的键是设备项的名称(itemName),值是一个对象,该对象包含了检查时间和对应的检查结果
    // 检查结果按照月份进行组织,月份作为对象的键,检查结果作为值
    const summaryMap = result.data.data.reduce((result, item) => {
      if (item) {
        const { createTime, checkResult, checkHandle, itemName } = item;
        const record = result[itemName];
        if (!createTime) {
          return result;
        }
        const month = this.$moment(createTime).format("MM");
        const day = this.$moment(createTime).format("DD");
        if (record) {
          record["checkResult" + month] = checkResult;
          record["checkHandle" + month] = checkHandle;
          record["day" + month] = day;
        } else {
          result[itemName] = {
            ...item,
            ["checkResult" + month]: checkResult,
            ["checkHandle" + month]: checkHandle,
            ["day" + month]: day,
          };
        }
      }
      return result;
    }, {});
    // 排序后更新表格数据
    console.log("summaryMap", summaryMap);
    this.tableData = Object.values(summaryMap).sort((a, b) => a.seq - b.seq);
  } catch (error) {
    console.error("Error fetching check results:", error);
  }
}
西门品
2024-12-11

要将每个月有数据的日期显示在列名中,你需要动态地生成表格的列配置,而不是在代码中硬编码列名。基于你的需求,你需要从数据结果中提取每个月有数据的日期,并基于这些日期创建新的列。以下是一个可能的解决方案:

### 解决方案

1. **解析数据并收集日期**:
   首先,你需要遍历数据结果,并收集每个月中哪些日期有数据。你可以使用一个嵌套的对象来存储这些日期。

2. **动态生成列配置**:
   根据上一步收集到的日期信息,动态生成表格的列配置。

3. **更新表格数据**:
   将解析后的数据更新到表格中,确保数据的结构与动态生成的列配置相匹配。

### 示例代码

下面是一个简化的示例代码,展示了如何实现上述步骤:

async sync fetchCurrentResult() {
try {

const result = await getCheckResultSummary({
  equipmentNumber: this.equipment.equipmentNumber,
  checkRange: this.currentYear,
});
console.log("result", result.data.data);

// 用于存储每个月的日期
const dateMap = {};

// 解析数据并收集日期
result.data.data.forEach(item => {
  if (item.createTime) {
    const date = this.$moment(item.createTime).format('YYYY-MM-DD');
    const month = this.$moment(item.createTime).format('YYYY-MM');
    if (!dateMap[month]) {
      dateMap[month] = new Set();
    }
    dateMap[month].add(date);
  }
});

// 动态生成列配置
const tableColumns = [];
const months = Object.keys(dateMap).sort();
months.forEach(month => {
  const monthColumn = new TableColumn({
    title: month,
    type: "String",
    field: month,
    width: 100,
    children: dateMap[month].map(date => ({
      title: date,
      type: "String",
      field: `${month}_${date.replace(/-/g, '')}`, // 创建一个唯一的字段名
      width: 100,
      options: { readOnlyCell: true },
      children: [
        new TableColumn({
          title: "点检",
          type: "String",
          field: `${month}_${date.replace(/-/g, '')}_checkResult`,
          options: {
            selection: "checkResult",
            itemProps: { code: "code", name: "label" },
          },
        }),
        new TableColumn({
          title: "处置",
          type: "String",
          field: `${month}_${date.replace(/-/g, '')}_checkHandle`,
          classCode: "CHECK_HANDLE",
          options: { multiple: true },
        }),
      ],
    })),
  });
  tableColumns.push(monthColumn);
});

// 排序后更新表格数据
const summaryMap = result.data.data.reduce((result, item) => {
  if (item) {
    const { createTime, checkResult, checkHandle, itemName } = item;
    const date = this.$moment(createTime).format('YYYY-MM-DD');
    const month = this.$moment(createTime).format('YYYY-MM');
    const key = `${month}_${date.replace(/-/g, '')}`;
    if (!result[itemName]) {
      result[itemName] = {};
    }
    result[itemName][`${month}_${date.replace(/-/g, '')}_checkResult`] = checkResult;
    result[itemName][`${month}_${date.replace(/-/g, '')}_checkHandle`] = checkHandle;
  }
  return result;
}, {});

this.tableData = Object.values(summaryMap).sort((a, b) => a.seq - b.seq);
console.log("tableData", this.tableData);
console.log("tableColumns", tableColumns);
this.tableColumns = tableColumns;

} catch (error) {

console.error("Error fetching check result summary:", error);

}
}


### 说明

- **日期格式**:这里使用 `YYYY-MM-DD` 格式来存储和比较日期,你可以根据需要调整。
- **字段名**:为了避免字段名冲突,这里使用 `${month}_${date.replace(/-/g, '')}` 来创建唯一的字段名。你需要确保在数据处理和显示时都能正确解析这些字段名。
- **数据更新**:在 `summaryMap` 中,你需要根据动态生成的字段名来存储和更新数据。
 类似资料:
  • 我在时刻js需要帮助。我有这段代码,它给了我月份名称、日期和日期。 以下是它的输出1月2月3月4月5月6月7月8月9月10月11月12月1日——Fri 2日星期六3日4日星期一5日星期二6日星期三7日星期四8日——Fri 9日星期六10日星期日11日星期一12日星期二 我需要以这种方式输出 1 月及以下我需要其相应的日期和日期 这样,可以请有人帮助我实现这一点。

  • 日期组件有有开始日期和结束日期 怎么处理选中的时间在一个月30天?

  • 我有两次约会。一个是以YYYYMMDD格式从其他应用程序的表中检索的,第二个日期是本地时间,我需要这两个日期之间的天数/月/年。 我试过了 但这给了我一些乱七八糟的数字。 变量$t=Fri Dec31 00:00:00 9999 变量$今天=Wed Feb19 14:40:55 2020 产出:25182094888 有什么想法吗?提前谢谢。

  • 我试图显示的细节插入到我的数据库上weppage 我尝试过将日期转换为sql日期 我预计输出为2000年3月2日,但它不起作用

  • 如果我有一个返回日期的变量,格式为dd-MMM-yyyy,那么2014年8月28日,如何获取上个月的日期。 我可以通过以下方式修改月份: 本质上,这是在月份中增加一个...但是我怎么能解释年份,所以如果当前日期是2014年12月12日,之前的日期是2013年1月12日? 我的应用程序使用AngularJS可以使用过滤器。 更新时间: 为什么虽然月份增加了,但日子显示为01而不是28?

  • 问题内容: 我有一张表,如下所示: 我从中创建以下视图: 现在,当我想创建每月计数以了解如何将每日总和除以得出平均列a(即特定月份中的天数)时,就会出现问题。 我知道要在PostgreSQL中获得成功,您可以: 但是我不能使用,我必须以某种方式让它知道分组完成的月份。任何建议,即什么应该取代 ??? 在此视图中: 问题答案: 更快,更短一点,您得到的是天数,而不是: 可以将多个单位合并为一个值。因

  • 我有一个LocalDate,需要得到一个月的第一天和最后一天。我该怎么做? 我需要获取LocalDate格式的和。 使用Three-Ten LocalDate类。

  • 对于我的具体情况,n=4,但可能有一天需要n=5或n=6。 我需要的顶级描述:我有一个表单,允许我将名称和日期添加到跳转日志中。我需要构建一个查询,该查询将显示每个跳转器的四个最近跳转,每个日期有一列。 我的表单将数据存储在“JUMP”表中,该表有3个字段:JUMPID、NAME、DATE。示例数据如下所示: 我现在使用的查询返回每个跳线最近的4次跳转,但将所有日期存储在同一列中。查询是: 此查询