首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >根据其他列计算Google电子表格中的日期列

根据其他列计算Google电子表格中的日期列
EN

Stack Overflow用户
提问于 2018-03-17 23:33:17
回答 1查看 123关注 0票数 3

我做了一张谷歌单子,用来处理我的药物。

在A栏,我服用了一种下降药。最初吃药的时间并不重要,但重要的是,当我吃下一片药时,每次吃药的时间是不同的。一颗药丸,服用后,我需要服用下一个6小时后,而另一个,我不吃,直到24小时后。我每天都会在不同的时间睡觉,所以我开始服用避孕药的时间取决于我什么时候醒来,或者什么时候吃早餐之类的。最重要的是我需要等6个小时才能再次服用。那是我的止痛药。

到目前为止,我有表设置,所以我有下拉列表的药物和第2栏输入确切的日期和时间,我采取的药片。在第三栏,我有一个公式,设置为第2栏,并增加6小时,这是不正确的所有药物,所以这是我需要帮助。我知道这是可以做到的,但我不知道该问谁。如果我能得到它,以便第三栏将看到我选择了什么药物,然后取决于哪一种,它将投入的时间,我需要采取下一个。这是我到目前为止所得到的,但是使用一个公式来增加6个小时,这也是为什么这个公式行不通的原因:

工作表

代码语言:javascript
复制
Medication        Pill-taken-at        +6 hours
----------------------------------------------------------
Mycoxofloppin     2018-03-17 12:44     2018-03-17 18:44 
Maryjaneaspliff   2018-03-16 04:20     2018-03-16 10:20

脚本

代码语言:javascript
复制
function onEdit(e) {
  var timezone = "GMT-5";
  var timestamp_format = "yyyy-MM-dd   hh:mm";
  var ss = e.source.getActiveSheet();
  var start = 2;
  var end = 4;
  var row = e.range.getRow();
  if (e.range.getColumn() == 1){
    ss.getRange(row, start).setValue(new Date());
  }
}
EN

回答 1

Stack Overflow用户

发布于 2018-03-18 00:04:50

Range::getValue会在Google的API中获取单元格的值。我假设您的单元格类型为DateTime,因此getValue()将为您提供一个JavaScript Date值,您可以轻松地对其执行日期计算。

如果您的单元格键入正确,则不需要担心时区或日期格式。(“输入”与“数据类型”相同,而不是“键盘键入”)。

代码语言:javascript
复制
function onEdit(event) {

    var range = event.range;
    if( range.getColumn() != 1 && range.getColumn() != 2 ) {
        // Only update when column 1 or 2 are updated.
        return;
    }
    var rowNumber = range.getRow();

    var ss = event.source.getActiveSheet();

    var drugName     = ss.getRange( rowNumber, 1 ).getValue();
    var lastDoseTime = ss.getRange( rowNumber, 2 ).getValue();

    // Validate info in the edited row:
    if( !drugName ) {
        console.warn( "No drug name specified in col 1, row %d.", rowNumber );
        return;
    }

    if( !( lastDoseTime instanceof Date ) ) {
        console.warn("No valid date value in col 2, row %d.", rowNumber );
        return;
    }

    var hoursUntilNextDose = getTimeBetweenDosesInHours( drugName );
    if( !hoursUntilNextDose ) {
        console.warn("No dose time available for the drug \"%s\".", drugName );
        return;
    }

    var timeUntilNextDoseInMilliseconds = hoursUntilNextDose * 60 * 60 * 1000;

    var nextDoseUnix = lastDoseTime.getTime() + timeUntilNextDoseInMilliseconds;
    var nextDoseTime = new Date( nextDoseUnix );

    ss.getRange( rowNumber, 3 ).setValue( nextDoseTime );
}

function getTimeBetweenDosesInHours( drugName ) {

    // toUpperCase() is more robust than toLowerCase(): https://msdn.microsoft.com/en-us/library/bb386042.aspx
    switch( drugName.toUpperCase() ) {
        case "MYCOXOFLOPPIN"  : return 6;
        case "MARYJANEASPLIFF": return 4.20;
        case "GYM"            : return 365 * 24;
        default               : return null;
    }
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49342988

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档