You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Google Sheets使用Google脚本处理日期时显示为时间戳大数字问题求助

解决Google Sheets脚本中日期转大数字的问题

嘿,这个坑我之前踩过!Google Sheets里显示为dd/mm/yyyy的日期,本质是序列号(从1900年1月1日开始计算的天数,不是你猜的秒数哦)。当你用sheet.getDataRange().getValues()获取数据时,日期列会被转换成JavaScript的Date对象,而你用.valueOf()方法会把这个Date对象直接转成毫秒级时间戳(从1970年1月1日开始的毫秒数),存回工作表自然就显示成一串大数字了。

给你几个实用的解决方案:

方案1:直接保留Date对象操作(最推荐)

如果你的排序逻辑不需要提取日期的数值,完全可以直接用Date对象进行比较,不用调用.valueOf()。Google Sheets的setValues()方法能自动识别Date对象,写入后会按照你设置的dd/mm/yyyy格式显示:

// 获取源数据,日期列是Date对象
const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("源表");
const data = sourceSheet.getDataRange().getValues();

// 按日期列排序(假设日期在第2列,索引为1)
data.sort((rowA, rowB) => rowA[1] - rowB[1]);

// 写入新工作表
const newSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("新表");
newSheet.getRange(1, 1, data.length, data[0].length).setValues(data);

方案2:处理数值后转回到Date对象

如果必须要提取日期的数值做计算,处理完记得把时间戳转回Date对象再写入:

const sourceSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("源表");
const data = sourceSheet.getDataRange().getValues();

// 遍历处理每一行,假设第2列是日期
data.forEach(row => {
  // 提取日期的时间戳(数值)
  const timestamp = row[1].valueOf();
  // 这里插入你需要的数值处理逻辑...
  // 处理完转回到Date对象
  row[1] = new Date(timestamp);
});

// 写入新表
const newSheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("新表");
newSheet.getRange(1, 1, data.length, data[0].length).setValues(data);

方案3:强制设置单元格格式(兜底)

如果写入后日期格式还是不对,可以在写入后手动设置目标列的格式:

// 写入数据后,给日期列(第2列)设置dd/mm/yyyy格式
newSheet.getRange(1, 2, data.length, 1).setNumberFormat("dd/mm/yyyy");

核心要点就是:Google Sheets对Date对象有原生支持,尽量不要把它转成纯数值直接写入,除非你特意要存储时间戳数据。

内容的提问来源于stack exchange,提问作者RyanWantsToLearn

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.22 07:32:57