如何将UNIX epoch时间戳转换为Google Sheets日期时间值
原有代码的问题
- 冗余的整列读取逻辑:自定义函数直接通过参数接收传入的单元格值即可,你写的
getRange('L:L').getValue()只会读取L1单元格的内容,后续直接被覆盖,属于完全无效的代码,还会拖慢函数运行速度 - 变量重复定义:连续两次用
var d赋值,第一次的取值逻辑没有任何作用 - 不支持批量计算:没法直接套用在整列上,只能手动给每个单元格写公式,效率极低
- 缺少异常兼容:碰到空单元格、非数值格式的内容时会直接返回错误值,影响表格正常显示
修正后的可运行代码
/** * 将秒级epoch时间戳转换为表格时区下的可读日期时间 * @param {number|Array<Array<number>>} input 秒级时间戳,支持单个值/整列范围传入 * @return {string|Array<Array<string>>} 格式化后的日期时间 * @customfunction */ function TIME_TO_DATE(input) { const tz = SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(); const formatStr = 'dd-MM-yyyy hh:mm:ss a'; // 处理批量传入的整列/范围值 if (Array.isArray(input)) { return input.map(row => row.map(cellVal => { // 空单元格直接返回空值,避免报错 if (!cellVal && cellVal !== 0) return ''; // 秒级时间戳转毫秒生成日期对象 const dateObj = new Date(cellVal * 1000); return Utilities.formatDate(dateObj, tz, formatStr); })) } // 处理单个单元格传入的情况 if (!input && input !== 0) return ''; const singleDate = new Date(input * 1000); return Utilities.formatDate(singleDate, tz, formatStr); }
使用步骤
- 打开表格顶部菜单栏的「扩展程序」→「Apps Script」,把上面的代码全量粘贴到脚本编辑器里,点击保存按钮给项目随便命个名,之后回到表格页面刷新等待5-10秒让函数加载完成
- 转换L列整列时间戳:找一个空白列的首行单元格,输入公式
=TIME_TO_DATE(L:L)按回车,会自动批量完成整列转换 - 转换M列整列时间戳:操作逻辑和L列一致,公式写为
=TIME_TO_DATE(M:M)即可 - 转换单个单元格:比如需要转换L2单元格的时间戳,直接在目标单元格输入
=TIME_TO_DATE(L2)就能得到结果
注意:如果你的时间戳是13位的毫秒级epoch格式,把代码里所有的*1000删掉再保存,否则转换出来的时间会偏差1000倍
内容的提问来源于stack exchange,提问作者Sergiu Tihon
相关产品推荐
相关产品推荐

