您看到的值(Sat Apr 12 07:09:21 GMT+00:09 1902)是 Javascript 标准时间中的等效日期,比参考日期晚 20000 小时。
您应该简单地从结果中删除电子表格参考值以获得您想要的。
这段代码可以解决问题:
function getHours(){
var sh = SpreadsheetApp.getActiveSpreadsheet();
var cellValue = sh.getRange('E1').getValue();
var eqDate = new Date(cellValue);// this is the date object corresponding to your cell value in JS standard
Logger.log('Cell Date in JS format '+eqDate)
Logger.log('ref date in JS '+new Date(0,0,0,0,0,0));
var testOnZero = eqDate.getTime();Logger.log('Use this with a cell value = 0 to check the value to use in the next line of code '+testOnZero);
var hours = (eqDate.getTime()+ 2.2091616E12 )/3600000 ; // getTime retrieves the value in milliseconds, 2.2091616E12 is the difference between javascript ref and spreadsheet ref.
Logger.log('Value in hours with offset correction : '+hours); // show result in hours (obtained by dividing by 3600000)
}
注意:这段代码只有几个小时,如果你有几分钟和/或几秒钟,那么它也应该被开发来处理它......如果你需要它,请告诉我们。
编辑:解释一下...
电子表格使用 1899 年 12 月 30 日作为参考日期,而 Javascript 使用 1970 年 1 月 1 日,这意味着两个参考之间存在 25568 天的差异。所有这一切都假设我们在两个系统中使用相同的时区。当我们将电子表格中的日期值转换为 javascript 日期对象时,GAS 引擎会自动添加差异以保持日期之间的一致性。
在这种情况下,我们不想知道某物的真实日期,而是想知道绝对小时值,即“持续时间”,因此我们需要删除 25568 天的偏移量。这是使用getTime()
返回从 JS 引用日期开始计算的毫秒数的方法完成的,我们唯一需要知道的是电子表格引用日期的毫秒值,并从实际日期对象中减去该值。然后进行一些数学运算来获得几小时而不是毫秒,我们就完成了。
我知道这似乎有点复杂,我不确定我的解释是否会真正澄清问题,但总是值得尝试不是吗?
无论如何,只要(如评论中所述)根据电子表格的时区设置调整偏移值,结果就是我们需要的。当然可以让脚本自动处理它,但它会使脚本更加复杂,不确定它是否真的有必要。