如何在Google Apps Script中将日期时间转换为数值?
如何在Google Apps Script中将日期时间转换为数值
在Google Sheets中,日期和时间本质上是以数值存储的:1代表一整天,1小时对应1/24,1分钟对应1/(24*60),以此类推。在Google Apps Script中实现转换,核心是获取日期时间对应的原始数值,或是将Date对象转换为该数值。
修正你提供的示例代码
你给出的代码存在问题:直接对Range单元格对象做减法运算无法得到正确结果,必须先通过getValue()获取单元格内的日期时间值(返回Date对象或对应数值)。修正后的代码如下:
function calculateDuration() { const ss = SpreadsheetApp.getActiveSpreadsheet(); const maintenanceSheet = ss.getActiveSheet(); // 获取单元格的日期时间值(Date对象) const startTime = maintenanceSheet.getRange(3, 6).getValue(); const endTime = maintenanceSheet.getRange(3, 11).getValue(); // 计算时长(小时数):两个日期相减得到毫秒数,转换为小时 const durationHours = (endTime - startTime) / (1000 * 60 * 60); // 将结果写入目标单元格 maintenanceSheet.getRange(3, 13).setValue(durationHours); }
其他常见转换场景
- 将Date对象转换为Google Sheets数值:
若你有一个Date对象,想转换成Sheets识别的日期数值,可计算该日期与Sheets起始日期(1899年12月30日)的天数差:function dateToSheetsValue(date) { const sheetsEpoch = new Date('1899-12-30'); const diffMs = date - sheetsEpoch; return diffMs / (1000 * 60 * 60 * 24); // 转换为天数 } - 直接读取单元格的日期数值:
若不需要Date对象,想直接获取单元格存储的原始数值,可使用parseFloat处理getValue()的结果:const dateValue = parseFloat(maintenanceSheet.getRange(3, 6).getValue());
内容的提问来源于stack exchange,提问作者Araña Villaruel Ji-mhel
相关产品推荐
相关产品推荐

