【问题标题】:While exporting data to excel, date is changing according to timezone. How to avoid it?将数据导出到 Excel 时,日期会根据时区而变化。如何避免?
【发布时间】:2019-07-05 09:40:08
【问题描述】:

当我尝试以角度将数据导出到 excel 时,数据库中的日期位于“x”时区,而我正在从“y”时区导出数据。数据导出到 Excel 时,日期位于“y”时区。但我想保持它与数据库中的日期相同,即只有“x”时区的日期。

我希望输出为Mar 26 2014 12:00 AM,但我收到的是2014-03-25 23:00:00.000+0000

private export(records: any[]) {
    // get the export fields
    let exportFields = this.gridConfig.columnDefinitions.map(function (colDef) {
      if(false == colDef.exportField) {
        return;
      }
      return colDef.field;
    });
    let filtered = this.gridOptions.api.getSelectedRows().map(record => {
      return _.pick(this.flatten(record), exportFields);
    });

    const ws: XLSX.WorkSheet = XLSX.utils.json_to_sheet(filtered);

    let range = XLSX.utils.decode_range(ws['!ref']);
    for(let c = range.s.c; c <= range.e.c; ++c) {
      let address = XLSX.utils.encode_col(c) + "1"; // <-- first row, column number C
      if(!ws[address]) continue;
      ws[address].v = this.findHeaderNameByField(ws[address].v);
    }

    /* generate workbook and add the worksheet */
    const wb: XLSX.WorkBook = XLSX.utils.book_new();
    XLSX.utils.book_append_sheet(wb, ws, 'data');

    /* save to file */
    XLSX.writeFile(wb, 'Export.xlsx');
  }



When I debugged I found that data from api is only receiving as time with 'y' zone.

【问题讨论】:

  • 添加您正在执行日期格式设置的代码或添加您正在执行导出到 excel 的相关代码。
  • 我找到了解决方案之一。在后端的服务中,我将数据类型更改为 LocalDateTime (没有时区),以前是时间戳。现在来自 api 的响应与数据库中的相同。

标签: angular date timezone export-to-excel sheetjs


【解决方案1】:

我知道这不是最佳做法,但我只是更改了日期:

const date = <Date>cell.value;
if (date) {
    const ONE_MINUTE = 60 * 1000;
    const ticks = date.getTime() - date.getTimezoneOffset() * ONE_MINUTE;
    cell.value = new Date(ticks);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-08-10
    • 2016-04-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多