Google Sheets脚本编辑器数据验证构建器筛选日期列表格式化问题
解决方案
你之前调用Utilities.formatDate()失败大概率是两个常见配置错误:
- 格式字符串中表示月份的参数误用了小写
mm(小写mm对应时间的分钟数,大写MM才对应公历月份) - 时区参数和你设置的GMT+5:30不匹配
直接替换你代码中生成plSentDateValidationList的对应行即可,修改后完整逻辑如下:
// Get DC dates using FILTER var plSentDateList = PSIData.filter(function(item){ return item[0] === miDC; }) // 格式化日期为dd/mm/yyyy格式 var plSentDateValidationList = plSentDateList.map(x => { const rawDate = x[1]; // 过滤非日期类型值,避免运行报错 if (!(rawDate instanceof Date)) return rawDate; // 时区填你备注的GMT+5:30,格式串严格用大写MM表示月份 return Utilities.formatDate(rawDate, "GMT+05:30", "dd/MM/yyyy"); }).sort(); // Logger.log(plSentDateValidationList); var plSentDateValidationRule = SpreadsheetApp.newDataValidation().requireValueInList(plSentDateValidationList).setAllowInvalid(false).build(); // Apply validation rule to adjacent cell using offset activeCell.offset(0,1).setDataValidation(plSentDateValidationRule);
补充注意事项
- 该方案生成的数据验证下拉列表显示的是
dd/mm/yyyy格式的字符串,如果你后续需要读取该单元格的选中值做日期计算,需要先把字符串转回日期对象再处理 - 如果后续调整了表格的时区设置,需要同步修改
Utilities.formatDate的第二个时区参数,避免日期显示偏差
内容的提问来源于stack exchange,提问作者Rock
相关产品推荐
相关产品推荐

