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

Google Apps Script HTML打印时的时间戳格式设置问题

问题:Google Sheets时间戳在HTML输出中格式异常

Google Sheets中时间戳存储格式为MM/DD/YYYY HH:MM:SS,但通过Apps Script拉取数据并在HTML页面展示时,时间戳变成了默认的Fri Dec 09 2022 15:16:47 GMT-0700 (Mountain Standard Time)格式,无法保持表格中的显示格式。

现有脚本逻辑:从Google Sheet拉取数据,校验登录用户邮箱,仅返回匹配的用户记录并生成HTML表格展示。

问题根源

当前代码使用getValues()方法获取数据,该方法会将Sheet中的日期单元格转换为JavaScript Date对象。当直接将Date对象拼接进HTML字符串时,会自动触发toString()方法,导致格式变为默认的长日期字符串。

解决方案1:直接获取表格显示格式的数据

使用getDisplayValues()替换getValues(),该方法会直接返回单元格中显示的文本内容,包括已设置好的时间戳格式,无需额外处理。

修改后的完整getData()函数:

function getData() {
  var sheetName = dataSheet;
  var activeSheet = ss.getSheetByName(sheetName);
  // 替换getValues()为getDisplayValues(),直接获取显示文本
  var values = activeSheet.getDataRange().getDisplayValues();
  var header = values[0];
  var emailIndex = header.indexOf(emailHeader);
  var userData = [];
  for (var i = 0; i < values.length; i++) {
    if (values[i][emailIndex] == activeUser) {
      userData.push(values[i]);
    }
  }
  if (userData.length > 0) {
    var tableStart = '\n<table class="table table-hover table-sm">';
    var tableHead = '\n<thead>\n<tr>';
    for (var j = 0; j < header.length; j++) {
      tableHead = tableHead + '\n<th>' + header[j] + '</th>';
    }
    tableHead = tableHead + '\n</tr>\n</thead>';
    var tableBody = '\n<tbody>';
    for (var k = 0; k < userData.length; k++) {
      tableBody = tableBody + '\n<tr>';
      for (var l = 0; l < userData[0].length; l++) {
        tableBody = tableBody + '\n<td>' + userData[k][l] + '</td>';
      }
      tableBody = tableBody + '\n</tr>\n';
    }
    var tableEnd = '</tbody>\n</table>';
    var tableHtml = tableStart + tableHead + tableBody + tableEnd;
    return tableHtml;
  } else {
    return '<table class="table"><tbody><tr><td>No data found.</td></tr></tbody></table>';
  }
}

解决方案2:手动格式化Date对象(保留Date操作能力)

如果后续需要对日期进行计算、时区转换等操作,不想直接用显示文本,可以在拼接HTML时判断值类型,手动将Date对象格式化为目标格式:

修改表格体的循环逻辑:

for (var k = 0; k < userData.length; k++) {
  tableBody = tableBody + '\n<tr>';
  for (var l = 0; l < userData[0].length; l++) {
    var cellValue = userData[k][l];
    // 判断当前值是否为Date对象
    if (cellValue instanceof Date) {
      // 使用Utilities.formatDate格式化日期,指定时区和格式
      var formattedDate = Utilities.formatDate(
        cellValue,
        Session.getScriptTimeZone(), // 脚本时区,也可手动指定如"America/Denver"
        "MM/dd/yyyy HH:mm:ss"
      );
      tableBody = tableBody + '\n<td>' + formattedDate + '</td>';
    } else {
      tableBody = tableBody + '\n<td>' + cellValue + '</td>';
    }
  }
  tableBody = tableBody + '\n</tr>\n';
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 23:40:38