如何配置DateTimeFormater将2021-08-04T06:00:00.000Z转为08-04-2021格式
日期格式转换解决方案
有两种可选实现位置,可根据实际需求选择:
方案1:在Google Sheets服务端脚本处理,直接返回格式化后的日期
不需要修改前端代码,修改服务端逻辑即可:
var data = SpreadsheetApp.getActiveSheet().getDataRange().getValues(); // 新增日期格式化逻辑,遍历所有单元格处理日期类型值 var formattedData = data.map(row => { return row.map(cell => { // 判断单元格值是否为日期类型 if (cell instanceof Date) { // 格式化为MM-dd-yyyy格式 var month = ("0" + (cell.getMonth() + 1)).slice(-2); var day = ("0" + cell.getDate()).slice(-2); var year = cell.getFullYear(); return `${month}-${day}-${year}`; } return cell; }) }) // 把response中的原始数据替换为格式化后的formattedData即可 var response = {data: formattedData}; return ContentService .createTextOutput(JSON.stringify(response)) .setMimeType(ContentService.MimeType.JSON); }
注意:需要保证Google Apps Script的项目时区和你表格的时区一致,避免出现日期差1天的问题,时区配置可在脚本项目设置页调整。
方案2:在前端处理,不需要修改服务端代码
直接修改前端逻辑,渲染数据时做格式转换:
var try_num = 5 var delayInMilliseconds = 500; function getVarFromUrl(url) { return url.match(/[?](.*)/)[1]; } // 新增日期格式化工具函数 function formatDate(val) { // 判断是否为ISO格式的日期字符串 if (/^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}\.\d{3}Z$/.test(val)) { const date = new Date(val); const month = ("0" + (date.getMonth() + 1)).slice(-2); const day = ("0" + date.getDate()).slice(-2); const year = date.getFullYear(); return `${month}-${day}-${year}`; } return val; } function fetch_data(url) { fetch(url) .then(response => { if (response.ok) { return response.json() } else if(response.status === 404) { return Promise.reject('error 404') } else { return Promise.reject('some other error: ' + response.status) } }) .then(data => main(data)) .catch(error => start()); } function start() { setTimeout(function() { if (try_num >= 1) { try_num -= 1 fetch_data('https://script.google.com/macros/s/AKfycbztu69qk4fkFqVqSHLC2hIxuN9xiHFJgsYr-nMvhGQungJN0S6r/exec') } }, delayInMilliseconds) } function main(data) { console.log(data) var rows = data[0].data console.log(rows) for (var row_num in rows) { document.getElementById("table").innerHTML += "<tr id='" + row_num + "'></tr>" console.log(rows[row_num]) for (var element_num in rows[row_num]) { console.log(rows[row_num][element_num]) // 调用格式化方法处理内容后再渲染 const content = formatDate(rows[row_num][element_num]) document.getElementById(row_num).innerHTML += "<th>" + content + "</th>" } } } window.onload = function() { start() }
如果你的表格里日期是固定列,可直接判断列索引再处理,不需要每个单元格都做正则校验,性能会更好。
内容的提问来源于stack exchange,提问作者J2 K
相关产品推荐
相关产品推荐

