我真的以为我开始明白这是如何工作的,直到我试图为这个问题提炼出一个测试用例并再次感到困惑。
使用Google电子表格,您可以编写如下自定义函数:
function dateToSeconds(date) {
var hours = date.getHours();
var minutes = date.getMinutes();
var seconds = date.getSeconds();
return (hours*3600) + (minutes*60) + seconds;
}
并通过例如在单元格中调用它。
=dateToSeconds(A1)
它完成了你的期望。但是,如果你这样称呼它:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("A2").setValue(dateToSeconds(sheet.getRange("A1").getValue()));
}
存在25m 21s的差异。到底是什么?
另外,如果你想从脚本中返回一个日期对象,以便将其格式化为时间,你可以这样做。
function newTime(hours, minutes, seconds) {
// 1899-12-30 is the epoch for time values, it seems
// http://stackoverflow.com/questions/4051239/how-to-merge-date-and-time-as-a-datetime-in-google-apps-spreadsheet-script
return new Date(1899, 11, 30, hours, minutes, seconds, 0);
}
并通过执行以下方式调用:
=newTime(A1, A2, A3)
它工作正常。如果你这样做:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
var values = sheet.getRange("A1:C3").getValues();
sheet.getRange("D3").setValue(newTime(values[0], values[1], values[2]));
}
然后(给定输入11:00:00),它被格式化为如下日期:
01/01/1970 01:00:00
看起来它被解释为更传统的1970年代后一个小时?我认为我之前看到的行为有点对称,上面有25m 21s偏移,我会看到:
10时34分39秒
我的测试用例是here
答案 0 :(得分:1)
你的= dateToSeconds()与test()函数的行为似乎有些奇怪。看起来有一个错误导致两者之间的时间差异。请在issue tracker中提出错误。
然而,我能够通过在单元格上使用数字格式来实现这一点。看看我的modified copy of your spreadsheet。在单元格A2中,我输入了“29/04/2012 11:00:00”,然后设置格式>数字> 15:59:00时间。您也可以使用Range.setNumberFormat(“HH:mm:ss”)以编程方式执行此操作;这导致单元格A2显示为11:00:00。
然后,我修改了你的测试函数以获得这段代码:
function test() {
var sheet = SpreadsheetApp.getActiveSheet();
sheet.getRange("E2").setValue(dateToSeconds(sheet.getRange("A2").getValue()));
Logger.log(sheet.getRange("A2").getValue());
Logger.log(sheet.getRange("A2").getNumberFormat());
var values = sheet.getRange("A4:C4").getValues();
Logger.log(values[0][0] + " " + values[0][1] + " " + values[0][2]);
sheet.getRange("E4").setValue(newTime2(values[0][0], values[0][1], values[0][2])).setNumberFormat("HH:mm:ss");
}
而不是newTime函数,我用这段代码创建了一个newTime2:
function newTime2(hours, minutes, seconds) {
var date = new Date();
date.setHours(hours);
date.setMinutes(minutes);
date.setSeconds(seconds);
Logger.log(date);
return date;
}
我希望有所帮助。
答案 1 :(得分:0)
有关如何获取正确值的信息,请参阅此帖子,因为电子表格时间和Java脚本时间不同,它们有不同的起点:
GAS: How to read the correct time values form Google Spreadsheet