Google Apps Script截取日期去除时间时substring输出异常如何解决
问题成因
你遇到的问题由3个核心错误导致:
- Google Sheets中存储的标准日期时间单元格,调用
getValue()获取到的是JavaScript原生Date对象,并非你在单元格界面看到的01/01/2022 12:30:00格式字符串。直接对Date对象调用toString(),会输出JS默认的长日期格式(类似Fri Dec 31 2021 16:00:00 GMT+0000),和单元格显示的文本格式完全不一致。 - 字符串截断的逻辑本身完全不可靠,同时受脚本运行时区和表格时区不匹配的影响,日期值会出现偏移:你看到的
Fri Dec 31就是时区偏移导致日期比实际早了1天,截断前10位字符刚好拿到星期、月份、日期的片段,和预期格式完全不符。 - 就算截断逻辑偶然拿到正确文本,写回单元格的是纯字符串类型,后续无法直接使用表格内置日期函数做计算、排序等操作。
正确实现方案
方案1:保留日期数据类型(推荐)
不需要修改单元格存储的实际值,直接设置单元格数字格式即可隐藏时间部分,保留dd/MM/yyyy的显示效果,单元格值依然是日期类型,后续可正常做日期相关计算:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var daily_data = spreadsheet.getSheetByName("Daily Data"); // 设置C4单元格日期显示格式为 日/月/年 daily_data.getRange("C4").setNumberFormat("dd/MM/yyyy");
方案2:输出纯文本格式日期
如果你确实需要将单元格内容替换为01/01/2022格式的纯文本,不要用字符串截断,使用官方工具类按指定格式、匹配表格时区做格式化:
var spreadsheet = SpreadsheetApp.getActiveSpreadsheet(); var daily_data = spreadsheet.getSheetByName("Daily Data"); var dateValue = daily_data.getRange("C4").getValue(); // 第二个参数替换为你表格使用的时区,例如东八区填"Asia/Shanghai" var formattedDate = Utilities.formatDate(dateValue, "Asia/Shanghai", "dd/MM/yyyy"); daily_data.getRange("C4").setValue(formattedDate);
注意:方案2写入的是纯文本内容,会丢失日期类型属性,非特殊需求优先使用方案1。
内容的提问来源于stack exchange,提问作者Nagaram92
相关产品推荐
相关产品推荐

