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

Google Apps Script转JSON日期格式可读性问题求助

解决Google Sheets日期转JSON后格式变为ISO 8601的问题

问题的核心原因是:Google Sheets中的日期在Apps Script里会被解析成Date对象,当你用JSON.stringify()转换时,Date对象会自动序列化为ISO 8601格式的字符串(比如2023-01-17T14:17:35.270Z)。下面提供两种可行的解决思路,你可以根据需求选择:

方案一:在Apps Script后端提前格式化日期

这种方法的好处是前端不需要额外处理,直接使用格式化好的字符串即可。修改你的Apps Script代码,在将单元格值存入record时,判断是否为日期对象,然后格式化为你需要的dd/MM/yyyy HH:mm:ss格式:

function doGet(e) {
  var sheet = SpreadsheetApp.getActive();
  var nse = sheet.getSheetByName("Sheet1");
  var data = [];
  var rlen = nse.getLastRow();
  var clen = nse.getLastColumn();
  var rows = nse.getRange(1,1, rlen, clen).getValues(); 
  // 替换成你Google Sheets对应的时区,比如印度时区是"Asia/Kolkata",按需调整
  const TIME_ZONE = "Asia/Kolkata";
  const DATE_FORMAT = "dd/MM/yyyy HH:mm:ss";

  for(var i = 1; i < rows.length; i++) {
    var datarow = rows[i];
    var record = {};
    for(var j=0; j < clen ; j++){ 
      var cellValue = datarow[j];
      // 判断是否为日期对象,是的话格式化
      if (cellValue instanceof Date) {
        cellValue = Utilities.formatDate(cellValue, TIME_ZONE, DATE_FORMAT);
      }
      record[rows[0][j]] = cellValue;
    }
    data.push(record);
  }
  var result = JSON.stringify(data);
  return ContentService.createTextOutput(result).setMimeType(ContentService.MimeType.JSON);
}

关键说明:

  • Utilities.formatDate()需要三个参数:日期对象、时区字符串、格式字符串。时区可以参考IANA时区数据库选择合适的值,确保和你Google Sheets里的时区一致。
  • 格式字符串中的dd代表两位数的日期,MM是两位数的月份(注意大写,小写mm是分钟),HH是24小时制的小时,mm是分钟,ss是秒。

方案二:在前端JavaScript中格式化日期

如果你不想修改后端代码,可以在前端拿到ISO日期字符串后,转换为可读格式。下面是修改后的前端代码,包含一个日期格式化函数:

<section>
    <h1>My Google Sheet Table</h1>
  
    <!-- TABLE CONSTRUCTION-->
    <table id='mytable'>
        <!-- HEADING FORMATION -->
        <tr>
            <th>Date</th>
            <th>Name</th>
            <th>Phone Number</th>
            <th>Months</th>
        </tr>
  
        <script>
            // 定义日期格式化函数,处理UTC转当地时区(这里以UTC+5.5为例,对应印度时区)
            function formatISODate(isoDateStr, utcOffsetHours) {
                const date = new Date(isoDateStr);
                // 调整时区偏移
                date.setHours(date.getUTCHours() + utcOffsetHours);
                // 提取各部分并补零
                const day = String(date.getDate()).padStart(2, '0');
                const month = String(date.getMonth() + 1).padStart(2, '0'); // 月份从0开始,所以+1
                const year = date.getFullYear();
                const hours = String(date.getHours()).padStart(2, '0');
                const minutes = String(date.getMinutes()).padStart(2, '0');
                const seconds = String(date.getSeconds()).padStart(2, '0');
                return `${day}/${month}/${year} ${hours}:${minutes}:${seconds}`;
            }

            $(document).ready(function () {
                // FETCHING DATA FROM JSON FILE
               $.getJSON("JsonDataLink", 
                        function (data) {
                    var content = '';

                    // ITERATING THROUGH OBJECTS
                    $.each(data, function (key, value) {
                        // 使用格式化函数处理日期
                        const formattedDate = formatISODate(value.DATE, 5.5);

                        //CONSTRUCTION OF ROWS HAVING
                        // DATA FROM JSON OBJECT
                        content += '<tr>';
                        content += '<td>' + formattedDate + '</td>';

                        content += '<td>' + value.Name + '</td>';

                        content += '<td>' + value.Phone + '</td>';

                        content += '<td>' + value.Months + '</td>';

                        content += '</tr>';
                    });
                      
                    //INSERTING ROWS INTO TABLE 
                    $('#mytable').append(content);
                });
                
            });
            
        </script>
</section>
</body>
</html>

关键说明:

  • formatISODate函数接收ISO日期字符串和UTC偏移小时数(比如印度时区是UTC+5.5,所以传5.5),将UTC时间转换为当地时间后再格式化。
  • 如果你的时区是整数偏移(比如UTC+8),直接传对应的数字即可。
  • padStart(2, '0')用来确保日期、月份、时间部分都是两位数(比如1月变成01,9点变成09)。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:01:45