【问题标题】:Compare timestamp in two different formats - GAS比较两种不同格式的时间戳 - GAS
【发布时间】:2015-03-17 13:11:26
【问题描述】:

我正在使用 Mogsdad here 发布的增强型工作流脚本。

我已经设法解决了一些问题,但我目前遇到的一个问题是本节出现的错误 -

// Record approval or rejection in spreadsheet
  var row = ArrayLib.indexOf(data, 0, timestamp);
  if (row < 0) throw new Error ("Request not available.");  // Throw error if request was not found
  sheet.getRange(row+1, approvalCol).setValue(e.parameter.approval);

我收到“请求不可用”错误,因为 ArrayLib.indexOf 对象正在比较从同一来源但通过两个不同“路由”呈现的时间戳。

'timestamp' 变量的时间戳如下所示 - “17/03/2015 18:00:11”

...“数据”变量中包含的时间戳(应与时间戳变量匹配)如下所示 -“Tue Mar 17 2015 00:30:10 GMT-0700 (PDT)”。

我假设这两种不同的格式是导致 ArrayLib.indexOf 对象返回“-1”结果并因此返回错误消息的原因。

对我需要做些什么才能使匹配成功运行有什么想法吗?

【问题讨论】:

    标签: javascript datetime google-apps-script google-forms


    【解决方案1】:

    为时间戳值创建一个新的 Date 对象,这样您就可以确保它们可以进行比较。代码应如下所示:

      var dateFromTimestamp = new Date(timestamp);
    

    【讨论】:

    • 非常感谢您的建议 - 它有助于调整格式。现在我发现“数据”变量中返回的时间戳 - 2015 年 3 月 17 日星期二 15:37:02 GMT-0700 (PDT) 和“时间戳”变量中返回的时间戳 - 2015 年 3 月 17 日星期二15:37:04 GMT-0700 (PDT) 2 秒。知道这种滞后可能来自哪里吗?
    • 它基于脚本的执行。您可以将秒数设置为零,以确保两个日期完全匹配。该函数将是:dateFromTimestamp.setSeconds(0);
    • 谢谢里维罗。我想我可以轻松地将“时间戳”变量设置为零秒,但将“数据”变量的时间戳设置为零秒可能是一个挑战,因为它位于值数组中。我克服这个问题的另一个想法是使用 n(timestamp) 函数将表单响应表中的时间戳转换为一个值,并将其用作比较器。
    【解决方案2】:

    在查看了其他一些帖子后,我想出了一个似乎效果很好的解决方案,并克服了使用时间戳的问题。

    我在创建票号的响应表的第一列中放置了一个数组公式 - =ArrayFormula(if(B2:B,"AFR"&text(row(A2:A)-1,"00000"),iferror(1/0)))

    然后我检索了票号 (var cellVal) 并将其与电子邮件一起发送。响应电子邮件每次都将批准值带到正确的行......到目前为止。

    function sendEmail(e) {
      // Response columns: Timestamp    Requester Email Item    Cost
      var email = e.namedValues["Requester Email"];
      var item = e.namedValues["Item"];
      var cost = e.namedValues["Cost"];
      //var timestamp = e.namedValues["Timestamp"];
      var row = e.range.getRow();
      var seq = e.values[1];
      var url = ScriptApp.getService().getUrl();
      var sheet = SpreadsheetApp.openById('1pFL0CEW5foe8nAtk0ZwwTleYrBn2YulMu_eKPDEFQaw').getSheetByName("Form Responses 1");
      var range = sheet.getDataRange();
      var cellval = range.getCell(row,1).getValue();
      //var origMail = range.getCell(row,3).getValue();
      Logger.log(cellval);
      //Logger.log(origMail);
    
      var options = '?approval=%APPROVE%&reply=%EMAIL%'
               .replace("%EMAIL%",e.namedValues["Requester Email"])         
      var approve = url+options.replace("%APPROVE%","Approved")+'&row='+row+'&cellval='+cellval; 
      var reject = url+options.replace("%APPROVE%","Rejected")+'&row='+row+'&cellval='+cellval;
    
      var html = "<body>"+
                    "<h2>Please review</h2><br />"+
                    "Request from: " + email + "<br />"+
                    "Ticket No: " + cellval + "<br />"+
                    "For: "+item +", at a cost of: $" + cost + "<br /><br />"+ 
                    "<a href="+ approve +">Approve</a><br />"+
                    "<a href="+ reject +">Reject</a><br />"+
                 "</body>";
    
      MailApp.sendEmail(Session.getEffectiveUser().getEmail(),
                        "Approval Request", 
                        "Requires html",
                        {htmlBody: html});  
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-02-04
      • 1970-01-01
      • 2018-08-20
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2012-02-04
      相关资源
      最近更新 更多