Google Apps Script拉取Sheets到Webapp时设置dd MMMM yyyy日期格式
解决方案
getValue()读取Google Sheets中格式为日期的单元格时,返回的是JavaScript原生Date对象,直接拼接到HTML字符串时会调用默认的日期转字符串规则,输出格式不受控。按下面两步修改即可实现dd MMMM yyyy(例:15 October 2024)的格式要求:
1. 新增通用日期格式化函数
在现有代码的任意位置(建议放在所有函数的最外层,不要嵌套在其他函数内部),添加下面这段格式化工具函数,专门把Date对象转换为目标格式:
function formatDate(dateVal) { // 日期为空时直接返回空字符串,避免显示异常内容 if (!dateVal) return ""; // 兼容单元格存储文本格式日期的场景 const date = new Date(dateVal); // 个位数日期补前导零 const padZero = (num) => num < 10 ? `0${num}` : num; // 月份全称列表,顺序对应JS Date的0-11月索引 const monthNames = [ "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December" ]; const day = padZero(date.getDate()); const month = monthNames[date.getMonth()]; const year = date.getFullYear(); return `${day} ${month} ${year}`; }
*如果需要显示中文月份全称,把上面monthNames数组里的英文月份替换为["一月","二月","三月","四月","五月","六月","七月","八月","九月","十月","十一月","十二月"]即可。
2. 修改日期字段的取值逻辑
找到原代码中给b3、b8赋值的两行,用新增的格式化函数包裹取值结果,其余代码不需要改动:
// 原有写法 // var b3 = sheet.getRange(i, 3).getValue(); // var b8 = sheet.getRange(i, 8).getValue(); // 修改为 var b3 = formatDate(sheet.getRange(i, 3).getValue()); var b8 = formatDate(sheet.getRange(i, 8).getValue());
可选优化(提升运行速度)
当前逐行循环调用getRange().getValue()的写法,数据量较大时响应会很慢,可以一次性把整表数据读取到内存后再处理,功能和原逻辑完全一致,运行效率更高,修改后的完整submitDT函数参考如下:
function submitDT(obj){ var ss = SpreadsheetApp.openById("google sheet url"); var sheet = ss.getSheetByName("mysheet"); var flag = 1; // 一次性读取所有有效单元格数据,避免反复调用表格接口 var allData = sheet.getDataRange().getValues(); for(var i = 0;i < allData.length;i++){ var vid = allData[i][1]; if(vid == obj){ flag = 0; var b1 = allData[i][0]; var b3 = formatDate(allData[i][2]); var b4 = allData[i][3]; var b5 = allData[i][4]; var b6 = allData[i][5]; var b7 = allData[i][6]; var b8 = formatDate(allData[i][7]); var data ="<center><table><tr><th colspan=2>Transaction Information.</th></tr><tr><td>Tracking No.:</td><td>" +obj+"</td></tr><tr><td>Transaction Title</td><td>"+b1+"</td></tr><tr><td>Date Accepted by Focal:</td><td>"+b3+"</td></tr><tr><td>Name of Establishment:</td><td>"+b4+"</td></tr><tr><td>Address:</td><td>"+b5+"</td></tr><tr><td>Status:</td><td>"+b6+"</td></tr><tr><td>Claimed by:</td><td>"+b7+"</td></tr><tr><td>Date Claimed:</td><td>"+b8+"</td></tr></table></center>"; return data; } } if(flag==1){ var data ="Transaction not found. For other concerns, please contact us at **********"; return data; } }
修改保存后重新部署Web应用时,记得选择「新建版本」,否则代码修改不会生效。
内容的提问来源于stack exchange,提问作者Not_a_programmer
相关产品推荐
相关产品推荐

