javascript 将月份更改为+1也会在单元格中添加时间戳,如何不插入时间戳

63lcw9qa  于 2023-10-14  发布在  Java
关注(0)|答案(1)|浏览(95)

当我点击“更改日期”按钮时,它会更新日期列中的日期。它将日期增加1个月,并在日期后输入时间戳。正如你所看到的,对于账户2的日期,它增加了完成1个月的日期,但是对于账户1,它只增加了30天,从10月1日到10月31日。
我只希望月份号改变,我不希望日期后输入的时间戳。

function dateChanger() {
  var sheetName = "Sheet 1"; // Please set your sheet name.
  var a1Notations = ['G5:G27', 'T5:T27', 'AG5:AG27', 'AT5:AT27']; // This is from your question.

  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var ssId = ss.getId();
  var ranges = a1Notations.map(e => `'${sheetName}'!${e}`);
  var { valueRanges } = Sheets.Spreadsheets.Values.batchGet(ssId, { ranges, valueRenderOption: "UNFORMATTED_VALUE" });
  var data = valueRanges.map(({ values }, i) => {
    var values = values.map(([v]) => {
      var unixTime = (v - 25569) * 86400 * 1000; // Ref: https://stackoverflow.com/a/6154953
      var temp = new Date(unixTime);
      temp.setMonth(temp.getMonth() + 1);
      var serialNumber = (temp.getTime() / 1000 / 86400) + 25569; // Ref: https://stackoverflow.com/a/6154953
      return [serialNumber];
    });
    return { range: ranges[i], values };
  });
  Sheets.Spreadsheets.Values.batchUpdate({ data, "valueInputOption": "USER_ENTERED" }, ssId);
}

我试着去掉unixTime和Serial Number变量,但它不起作用。

vjhs03f7

vjhs03f71#

从您提供的电子表格中,时区偏移可能与您当前的问题有关。那么,作为一个修改,下面的修改怎么样?

发件人:

var data = valueRanges.map(({ values }, i) => {
  var values = values.map(([v]) => {
    var unixTime = (v - 25569) * 86400 * 1000; // Ref: https://stackoverflow.com/a/6154953
    var temp = new Date(unixTime);
    temp.setMonth(temp.getMonth() + 1);
    var serialNumber = (temp.getTime() / 1000 / 86400) + 25569; // Ref: https://stackoverflow.com/a/6154953
    return [serialNumber];
  });
  return { range: ranges[i], values };
});

收件人:

var data = valueRanges.map(({ values }, i) => {
  var values = values.map(([v]) => {
    var unixTime = (v - 25569) * 86400 * 1000; // Ref: https://stackoverflow.com/a/6154953
    var temp = new Date(unixTime);
    temp = new Date(unixTime + (temp.getTimezoneOffset() * 60 * 1000)); // Added
    temp.setMonth(temp.getMonth() + 1);
    var serialNumber = ((temp.getTime() - (temp.getTimezoneOffset() * 60 * 1000)) / 1000 / 86400) + 25569; // Modified Ref: https://stackoverflow.com/a/6154953
    return [serialNumber];
  });
  return { range: ranges[i], values };
});
  • 当我使用您提供的测试表测试此修改时,似乎10/1/23更改为11/1/23

相关问题