如何从单元格中提取日期并将其与今天的日期进行比较

Posted

技术标签:

【中文标题】如何从单元格中提取日期并将其与今天的日期进行比较【英文标题】:How to pull date from cell and compare it to today's date 【发布时间】:2019-04-11 18:21:35 【问题描述】:

我正在使用电子表格来管理认证到期日期。我想在员工的认证将在 90 天内到期时向其发送电子邮件。我只想发一封电子邮件。我正在努力从单元格中获取日期并将其与今天的日期进行比较。

如果今天日期 + MS 中的 90 天是 > MS 中的认证到期日期,我想发送一封电子邮件。

我开始使用模板来防止发送重复的电子邮件。我让它与 if && 和两个单元格中的单词一起工作。我正在努力让日期开始工作。我曾尝试使用 getTime() 获取 MS 中的日期,但 getValues().getTime 返回错误。

var EMAIL_SENT = 'EMAIL_SENT';

var NintyDayInMs = 90*24*60*60*100;
var Today = new Date().getTime();
var expired = Today+NintyDayInMs;

/**
 * Sends non-duplicate emails with data from the current spreadsheet.
 */
function sendEmails2() 
  var sheet = SpreadsheetApp.getActiveSheet();
  var startRow = 2; // First row of data to process
  var numRows = 2; // Number of rows to process
  // Fetch the range of cells A2:B3
  var dataRange = sheet.getRange(startRow, 1, numRows, 4);
  // Fetch values for each row in the Range.
  var data = dataRange.getValues();
  for (var i = 0; i < data.length; ++i) 
    var row = data[i];
    var emailAddress = row[0]; // First column
    var message = row[1]; // Second column
    var emailSent = row[2]; // Third column
    var exp = row[3]; // Fourth column
    var expDate = exp.getTime();

    if (emailSent != EMAIL_SENT && expDate < expired)  // Prevents 
sending duplicates
      var subject = 'Sending emails from a Spreadsheet';
      MailApp.sendEmail(emailAddress, subject, message);
      sheet.getRange(startRow + i, 3).setValue(EMAIL_SENT);
      // Make sure the cell is updated right away in case the script is 
 interrupted
      SpreadsheetApp.flush();
    
  

我当前的代码导致

TypeError:在对象中找不到函数 getTime(单元格中的日期)。 (第 26 行,文件“代码”)

【问题讨论】:

【参考方案1】:

阅读Adding Days to a Date - Google Script 以更好地理解脚本中的日期算术。

缺陷在于试图链接到期日期。而不是:var exp = row[3]; // Fourth columnvar expDate = exp.getTime();

只用:var expDate = new Date(row[3]); // make the sheet value a date object

剩下的就顺其自然了……

var expDate = new Date(row[3]); // make the sheet value a date object    
Logger.log("expiry = "+expDate);    
var today = new Date();    
Logger.log("today = "+today);    
var today90 = new Date(today.getTime()+90*3600000*24);// 90 days from today    
Logger.log("today90 = "+today90);    
if ((today90 > expDate) && (emailSent!=EMAIL_SENT))    
   Logger.log("send the email");    
    
else    
    
   Logger.log("don't send the email");    

【讨论】:

这正是我所需要的。我没有对 Logger.log() 进行太多实验。这是一个很大的帮助 非常感谢!

以上是关于如何从单元格中提取日期并将其与今天的日期进行比较的主要内容,如果未能解决你的问题,请参考以下文章

从包含excel中文本字符串的单元格中提取日期

VBA如何将单元格中的年份转为天数

如何将EXCEL单元格中字符型日期截取并转为日期型?

iPhone - 获取给定地点/时区的当前日期和时间并将其与同一地点的另一个日期/时间进行比较的正确方法

XCTEST - 如何从屏幕截图中提取文本并将其与预期字符串进行比较

在Google工作表的单个列中的每个单元格中显示今天的日期