You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google表格Web应用时间显示错误:1899/1970异常年份求助

解决Google Sheets Web应用中onEdit时间显示异常问题

问题原因分析

  1. 纯时间字符串解析冲突:原代码用Utilities.formatDate生成纯时间字符串(如HH:mm:ss),Google Sheets会将这类字符串默认关联Excel兼容的起始日期1899-12-30,Web应用读取时直接展示了这个默认日期+时间的组合。
  2. 时区不匹配:修改后直接赋值new Date()却出现1970,核心是脚本运行时区(Session.getScriptTimeZone())与表格本身时区不一致,导致日期对象被错误转换;若Web应用未正确解析日期值,还会把日期的时间戳数字错误映射到Unix起始时间1970-01-01。
  3. 单元格格式错误:如果目标单元格设置为文本格式,直接写入日期对象会被转成时间戳数字,Web应用读取后显示异常。

解决方案

  1. 统一单元格格式:将需要显示时间的列(A、9、10列)设置为「日期时间」或「时间」格式,避免文本格式引发的解析错误。
  2. 绑定表格时区:替换Session.getScriptTimeZone()为表格自身时区,确保时间计算与表格完全一致。
  3. 日期对象+格式控制:不直接写入格式化后的字符串,而是写入原生Date对象,依赖表格单元格格式控制显示样式,Web应用读取标准日期值就不会出现异常解析。
  4. 修正Web应用读取逻辑:确保Web应用读取表格数据时,将日期值解析为正确的Date对象,而非字符串或数字。

修正后的代码

function onEdit(e) {
  var sheet = e.source.getActiveSheet();
  var range = e.range;
  var column = range.getColumn();
  var sheetName = "Join Queue [FOR ADVISEES]";
  // 获取表格自身时区,避免脚本与表格时区不一致
  var sheetTimeZone = sheet.getSpreadsheet().getSpreadsheetTimeZone();

  if (sheet.getName() === sheetName && [2, 6, 8].includes(column)) {
    var row = range.getRow();
    var targetCell;

    switch(column) {
      case 2:
        targetCell = sheet.getRange(row, 1);
        if (targetCell.getValue() === "") {
          targetCell.setValue(new Date());
        }
        // 修正原代码中blankRow的错误,替换为当前row
        sheet.getRange(row, 7).setValue(Session.getActiveUser().getEmail());
        break;
      case 6:
        targetCell = sheet.getRange(row, 9);
        if (targetCell.getValue() === "") {
          targetCell.setValue(new Date());
          // 强制设置单元格为时间显示格式
          targetCell.setNumberFormat("HH:mm:ss");
        }
        break;
      case 8:
        var statusCell = sheet.getRange(row, 8);
        if (statusCell.getValue() === "DONE") {
          targetCell = sheet.getRange(row, 10);
          if (targetCell.getValue() === "") {
            targetCell.setValue(new Date());
            targetCell.setNumberFormat("HH:mm:ss");
          }
        }
        break;
    }
  }
}

额外检查项

  • 确认Web应用读取表格数据时,使用Google Sheets API的标准日期解析逻辑,将返回的日期值转换为本地时间,而非直接显示原始字符串或数字。
  • 检查表格时区设置:打开表格 → 文件 → 设置 → 常规 → 时区,确保与业务需求时区一致。

内容的提问来源于stack exchange,提问作者meue1004

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.27 06:00:03