Google Apps Script doGet返回日期与表格不一致问题排查
Google Sheets Apps Script Web App接口返回日期与表格显示不一致问题
我在使用Google Sheets与Apps Script时遇到问题:部署为Web App的doGet接口返回的日期与表格中显示的日期不一致。已确认表格的区域设置、时区与Apps Script的时区设置一致,均为Asia/Ho_Chi_Minh。
我的appsscript.json配置
{ "timeZone": "Asia/Ho_Chi_Minh", "dependencies": {}, "exceptionLogging": "STACKDRIVER", "runtimeVersion": "V8", "webapp": { "executeAs": "USER_DEPLOYING", "access": "ANYONE_ANONYMOUS" } }
工作表数据
从名为log的工作表拉取数据,表格内容如下:
| A | Some data | |
|---|---|---|
| 1 | Date | Some data |
| 2 | 16/07/2022 | 2.34 |
| 3 | 17/07/2022 | 1.18 |
| 4 | 18/07/2022 | 4.16 |
接口脚本代码
function doGet(e) { try { const sh = SpreadsheetApp.getActive().getSheetByName('log') const data = sh.getDataRange().getValues() return ContentService .createTextOutput(JSON.stringify({ success: true, data })) .setMimeType(ContentService.MimeType.JSON) } catch (e) { return ContentService .createTextOutput(JSON.stringify({ success: false })) .setMimeType(ContentService.MimeType.JSON) } }
Web App接口返回数据
部署为Web App后,调用GET接口得到的返回数据:
{ "success": true, "data": [ [ "Date", "Some data" ], [ "2022-07-15T17:00:00.000Z", 2.34 ], [ "2022-07-16T17:00:00.000Z", 1.18 ], [ "2022-07-17T17:00:00.000Z", 4.16 ] ] }
本地测试脚本及日志
使用测试脚本读取A2单元格数据:
function test() { const sh = SpreadsheetApp.getActive().getSheetByName('log') const data = sh.getRange('A2').getValue() Logger.log(data) }
日志结果:
Sat Jul 16 00:00:00 GMT+07:00 2022
我预期接口返回的日期应与表格显示一致,但实际不符,请问我遗漏了什么?目前我使用getDisplayValues()获取表格显示的日期字符串作为临时解决方案。
更新
已切换回使用getValues()保留原始日期值,再在内部系统中转换为本地时间。示例代码如下:
Python(使用arrow库)
import arrow s = '2022-07-15T17:00:00.000Z' arrow.get(s, 'YYYY-MM-DDTHH:mm:ss.SSSZ').to('local').format('DD/MM/YYYY')
JavaScript
const s = '2022-07-15T17:00:00.000Z' new Date(s).toLocaleDateString('vi-VN')
内容的提问来源于stack exchange,提问作者Đức Thanh Nguyễn
相关产品推荐
相关产品推荐

