我的谷歌电子表格中的时间在工作表的网络应用程序中显示错误,用户将 1899 年视为年份,而不仅仅是时间

问题描述 投票:0回答:1

我有这个功能,可以自动分配某些行中单元格被填充的时间。它在数据表中工作正常,但在我为此表创建的网络应用程序中,显示了非常错误的日期。时间显示为 1899 年 12 月 30 日。

这是代码:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var column = range.getColumn();
  
     // Check if the edited cell is in column 2 (B), 5 (E), or 8 (H)
  if (column == 2 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 2
    var row = range.getRow();
    var dateCell = sheet.getRange(row, 1);
    if (dateCell.getValue() === "") {
      dateCell.setValue(new Date());
    }
      sheet.getRange(blankRow, 7).setValue(Session.getActiveUser().getEmail());

  } else if (column == 6 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 6
    var row = range.getRow();
    var timeCell = sheet.getRange(row, 9);
    if (timeCell.getValue() === "") {
      var currentTime = new Date();
      var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "HH:mm:ss");
      timeCell.setValue(formattedTime);
    }
  } else if (column == 8 && sheet.getName() == "Join Queue [FOR ADVISEES]") { // Column 8
    var row = range.getRow();
    var timeCell = sheet.getRange(row, 10);
    if (timeCell.getValue() === "") {
      var currentTime = new Date();
      var formattedTime = Utilities.formatDate(currentTime, Session.getScriptTimeZone(), "HH:mm:ss");
      timeCell.setValue(formattedTime);
    }
  }
}

这是它们在网络应用程序中的显示方式(顺便说一句,这些来自两个 else if 语句):

现在,我注意到主 if 语句中的代码给出了正确的日期和时间,在这里:所以我尝试使用与此相同的代码,并将其用于其余列。所以代码变成:

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var column = range.getColumn();
  
  // Check if the edited cell is in column 2 (B), 5 (E), or 8 (H)
  if (sheet.getName() == "Join Queue [FOR ADVISEES]" && [2, 6, 8].includes(column)) {
    var row = range.getRow();
    var dateCell;
    
    if (column == 2) { // Column 2
      dateCell = sheet.getRange(row, 1);
      if (dateCell.getValue() === "") {
        dateCell.setValue(new Date());
      }
      sheet.getRange(row, 7).setValue(Session.getActiveUser().getEmail());
    } else if (column == 6) { // Column 6
      dateCell = sheet.getRange(row, 9);
      if (dateCell.getValue() === "") {
        dateCell.setValue(new Date()); // Set current date and time
      }
    } else if (column == 8) { // Column 8
      var statusCell = sheet.getRange(row, 8);
      if (statusCell.getValue() === "DONE") {
        dateCell = sheet.getRange(row, 10);
        if (dateCell.getValue() === "") {
          dateCell.setValue(new Date()); // Set current date and time
        }
      }
    }
  }
}

然而,它并没有像第一个那样出来,只是年份改变了。从 1899 年开始,现在已经到了 1970 年。

javascript typescript google-sheets google-apps-script
1个回答
0
投票

这只是我的猜测。

修改要点:

  • 在您的显示脚本中,
    new Date()
    formattedTime
    HH:mm:ss
    的值被放入带有
    setValues
    的单元格中。在这种情况下,我猜想这些值作为日期对象放入单元格中,并且单元格值显示为
    HH:mm:ss
  • It works fine in the datasheet, but in the web app that I created for this sheet, VERY wrong dates are being displayed. The time is being read as December 30, 1899.
    And here's how they are being shown in the web app (these are from the two else if statements btw):
    和您的显示图像,我担心用于创建网络应用程序的脚本可能不会显示在您的问题中。如果您通过
    getValues
    检索单元格值并且在 Web 应用程序的 Javascript 端使用检索到的值,这可能是您当前显示图像中出现问题的原因,因为日期对象直接在表格单元格值中使用。为了解决这个问题,我建议将
    getValues()
    修改为
    getDisplayValues()
    。这样,单元格值将直接用作检索值。

修改后的脚本:

从以上几点来看,关于创建您的Web Apps的脚本或用于在您的图像的Web Apps上创建HTML表格的脚本,请修改如下。

getValues()
getDisplayValues()

并再次测试。

注:

© www.soinside.com 2019 - 2024. All rights reserved.