将数据导出到excel时,日期根据时区而变化。如何避免呢?

时间:2019-07-05 09:40:08

标签: angular

当我尝试将数据导出到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.

2 个答案:

答案 0 :(得分:0)

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

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);
}

答案 1 :(得分:0)

这是一个很好的技巧:

var dt = new Date('2017-07-17')
dt.setMinutes(dt.getMinutes() + dt.getTimezoneOffset())
console.log(dt)

这将完全忽略用户的时区。

有关getTimezoneOffset()的更多信息,请@ MDN:getTimezoneOffset