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

Google Script向JavaScript传值时仅日期类型无法正常传递问题

问题解决方法

根本原因

google.script.run 在Google Apps Script和前端JavaScript之间传值时,会自动对数据做JSON序列化/反序列化处理,而Google Apps Script的原生Date对象无法被正确序列化,直接传递会导致前端解析失败,中断回调函数执行。文本、数值类型可以被正常序列化,因此不会出现该问题。

修复方案

1. 改造Google Apps Script代码,传递前将日期转为字符串

在返回数据前,判断值的类型,如果是日期类型,将其格式化为前端<input type="date">可直接识别的YYYY-MM-DD格式字符串即可,修改后的代码如下:

function retreiveData(number){
  var url = "urlToSpreadsheet";
  var ss = SpreadsheetApp.openByUrl(url);
  var ws = ss.getSheetByName("Data");
  var data = ws.getRange(1,1, ws.getLastRow(), ws.getLastColumn()).getValues();
  var dataValues = [];
  var filterData = data.filter(
    function(r){
      if(r[2] == number){
        var i = 3;
        while(i < 29){
          let currentVal = r[i];
          // 识别日期类型,转为标准格式字符串
          if(currentVal instanceof Date) {
            // 方法1:手动拼接(适配脚本时区)
            let year = currentVal.getFullYear();
            let month = String(currentVal.getMonth() + 1).padStart(2, '0');
            let day = String(currentVal.getDate()).padStart(2, '0');
            currentVal = `${year}-${month}-${day}`;
            
            // 方法2:用内置工具类格式化(更推荐,可自定义格式)
            // currentVal = Utilities.formatDate(currentVal, Session.getScriptTimeZone(), "yyyy-MM-dd");
          }
          dataValues.push(currentVal);
          i++;
        }
      }
    }
  )
  return dataValues;
}

如果你的dateOpened输入框是datetime-local类型,只需要把格式调整为yyyy-MM-ddTHH:mm即可。

2. 确认时区配置一致

进入Google Apps Script项目的「项目设置」页面,确认脚本时区和你使用的Google Sheets表格时区完全一致,避免日期转换出现差1天的问题。

3. 前端代码无需调整

修改完服务端代码后,前端dataRetriever函数中的日期赋值逻辑可以正常运行,不需要额外修改。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.20 19:06:04