求助:用Google Apps Script将日期格式从mm/dd/yyyy转为dd/mm/yyyy
问题描述
我是JavaScript新手,正尝试通过脚本自动化工作。目前遇到问题:表格中日期格式为mm/dd/yyyy,需编写脚本将其转换为dd/mm/yyyy格式。已编写如下convertColumns函数,目标处理J2:L10000区域:
function convertColumns() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("J2:L10000"); var values = range.getValues(); var newValues = []; for (var i = 0; i < values.length; i++) { var row = values[i]; newValues.push([row[0], row[1], row[2].replace(/\//g, "-")]); } range.setValues(newValues); }
现寻求正确实现该日期格式转换的方法。
解决方法
你当前的代码仅替换了日期字符串的分隔符,没有实现mm/dd/yyyy到dd/mm/yyyy的格式转换。以下是两种适配不同存储场景的可行方案:
方案一:处理文本格式日期
如果表格中的日期是以纯文本形式存储(非Google Sheets内置日期对象),可通过拆分字符串重新拼接完成转换:
function convertColumns() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("J2:L10000"); var values = range.getValues(); var newValues = []; for (var i = 0; i < values.length; i++) { var row = values[i]; var dateStr = row[2]; var convertedDate = dateStr; // 仅处理合法的mm/dd/yyyy格式文本 if (dateStr && typeof dateStr === 'string') { var parts = dateStr.split('/'); if (parts.length === 3) { convertedDate = `${parts[1]}/${parts[0]}/${parts[2]}`; } } newValues.push([row[0], row[1], convertedDate]); } range.setValues(newValues); }
方案二:处理Google Sheets日期对象
如果表格中的日期是内置日期对象(非纯文本),需先提取日期分量再格式化:
function convertColumns() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("J2:L10000"); var values = range.getValues(); var newValues = []; for (var i = 0; i < values.length; i++) { var row = values[i]; var date = row[2]; var convertedDate = date; if (date instanceof Date && !isNaN(date)) { // 补零保证两位数格式,注意月份是0起始需加1 var day = String(date.getDate()).padStart(2, '0'); var month = String(date.getMonth() + 1).padStart(2, '0'); var year = date.getFullYear(); convertedDate = `${day}/${month}/${year}`; } else if (date && typeof date === 'string') { // 兼容文本格式的日期 var parts = date.split('/'); if (parts.length === 3) { convertedDate = `${parts[1]}/${parts[0]}/${parts[2]}`; } } newValues.push([row[0], row[1], convertedDate]); } range.setValues(newValues); }
额外技巧
如果仅需修改日期显示格式而非单元格实际值,直接设置数字格式更高效:
function setDateFormat() { var sheet = SpreadsheetApp.getActiveSheet(); var range = sheet.getRange("J2:L10000"); // 直接设置单元格显示格式为dd/mm/yyyy range.setNumberFormat("dd/mm/yyyy"); }
内容的提问来源于stack exchange,提问作者Empyrean
相关产品推荐
相关产品推荐

