比较两种不同格式的时间戳 - GAS

时间:2015-03-17 13:11:27

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

我使用的是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);

我得到了&#34;请求不可用&#34;错误,因为ArrayLib.indexOf对象正在比较从同一来源呈现的时间戳,但是通过两条不同的路由&#39;。

来自&#39;时间戳的时间戳&#39;变量看起来像这样 - &#34; 17/03/2015 18:00:11&#34;

...以及&#39;数据中包含的时间戳&#39;变量(应该与timestamp变量匹配)看起来像这样 - &#34; Tue Mar 17 2015 00:30:10 GMT-0700(PDT)&#34;。

我假设两种不同的格式是导致ArrayLib.indexOf对象返回&#39; -1&#39;结果,因此错误信息。

对于我需要做些什么才能使匹配成功运行?

2 个答案:

答案 0 :(得分:1)

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

  var dateFromTimestamp = new Date(timestamp);

答案 1 :(得分:0)

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

我在响应表的第一列中添加了一个数组公式,创建了一个票号 - = ARRAYFORMULA(如果(B2:B, “AFR” &安培;文本(行(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});  
}