通过Google Apps Script读取Google Sheet日期值与原表不符的问题
Google Apps Script读取Sheet日期出现时间偏差的解决办法
为啥会出现这个问题
这种多出50分39秒的偏差,本质是Google Sheets和JavaScript的日期体系不兼容导致的:
- Sheets的日期是从1900年1月0日开始算的序列号(为了兼容Excel当年的1900闰年bug),而JS的
Date对象是从1970年1月1日UTC开始计时的。 - 用
getValue()读日期时,脚本会自动把Sheet的序列号转成JS Date,但浮点数精度或者兼容逻辑的问题,就会搞出这种奇怪的时间偏移。
怎么解决
方法1:直接读显示的文本(最省心)
用getDisplayValue()拿单元格显示的日期文本,再转成Date,完全和你在Sheet里看到的一致:
val = new Date(startCell.offset(-21,i).getDisplayValue());
方法2:把时间部分砍掉
如果一定要用getValue()拿Date对象,手动把时分秒改成0,只留年月日:
val = startCell.offset(-21,i).getValue(); // 截断时间,只保留纯日期 val = new Date(val.getFullYear(), val.getMonth(), val.getDate());
方法3:检查单元格的真实值
右键Sheet里的日期单元格,看看单元格格式是不是纯日期(不带时间)。如果格式包含时间,可能单元格本身就存了时间值,只是被格式隐藏了,这时候要么改单元格格式,要么调整脚本逻辑。
内容的提问来源于stack exchange,提问作者Marcel
相关产品推荐
相关产品推荐

