【发布时间】:2021-02-10 23:25:44
【问题描述】:
我正在使用我所在时区的 Google 电子表格中的持续时间字段
这是我正在使用的数据和电子表格配置的示例
样本数据:
| actividadID | destinoID | atractivoID | actividadDescripc | actividadDuracion | actividadTipo |
|---|---|---|---|---|---|
| da839da6 | ae4f25ff | '46432440 | Visita | 1:00:00 a. m. | Específica |
脚本目标
我们的想法是遍历这些字段的子集,以便我获取电子表格的所有值并过滤它们:
function TourDuration(tourID, mySS) {
const touractivData = mySS.getSheetByName("TourActividad").getDataRange().getValues();
const activData = mySS.getSheetByName("Actividad").getDataRange().getValues();
var current_activList = touractivData.filter(function(item){
return item[1] == tourID; //Match Bot Numbers && Unprocessed trades
});
Logger.log("current_activList:");
Logger.log(current_activList);
当我检查我正在抓取的数据的结果时,我看到数据关闭,不仅按小时而且按分钟变为负数:
[da839da6, ae4f25ff, 46432440, Visita a la Plaza Mayor de Lima, Sat 12 月 30 日 01:08:36 GMT-05:00 1899, Específica]
(这个应该相当于1小时,但我得到的是负时间)
我的目标是将与我的过滤器匹配的所有持续时间添加到一个合并的持续时间中,但没有成功。
这里是完整的代码:
function TourDuration(tourID, mySS) {
const touractivData = mySS.getSheetByName("TourActividad").getDataRange().getValues();
const activData = mySS.getSheetByName("Actividad").getDataRange().getValues();
var current_activList = touractivData.filter(function(item){
return item[1] == tourID; //Match Bot Numbers && Unprocessed trades
});
var current_activList_length = current_activList.length;
var total_duration = 0;
for(var i = 0; i < current_activList_length; i++){
var activDuration = activData.filter(function(item){
return item[0] == current_activList[i][2]; //Match Bot Numbers && Unprocessed trades
});
var duration = Utilities.formatDate(new Date(activDuration[0][4]), "GTM-5", "dd/MM/yyyy HH:mm");
var dur2 = new Date(activDuration[0][4]).toString().substr(25,6)+":00";
dateString = Utilities.formatDate(activDuration[0][4], dur2, "MM/dd/yyyy HH:mm:ss");
Logger.log(duration)
Logger.log(dur2)
Logger.log(dateString)
total_duration = total_duration;
}
}
这是一个持续时间为 45 分钟的寄存器的日志结果:
会不会是 App Script 界面有不同的时区? 虽然分钟差异很难解释,因为差异通常以整小时为单位。
另外,我不打算使用 getDisplayValue(),因为我需要查阅整个工作表,而 getDataRange() 会更有效。
【问题讨论】:
-
docs.google.com/spreadsheets/d/… 值得一提的是,这是在 onChange 触发器上运行的,您需要通过运行函数 createSpreadsheetChangeTrigger 来设置它。之后从 TourActividad 复制任何行并将其粘贴到最后将复制此场景
-
I don't plan on using getDisplayValue() since I need to consult the whole sheet and getDataRange()这没有意义。使用getDisplayValues代替getValues,而不是getDataRange()...... -
大概,这就是发帖的目的。我会检查一下,谢谢
标签: javascript date google-apps-script