首页 > 解决方案 > 如果今天 = date_in_cell(或今天的迭代 + X) - Google Apps / Javascript

问题描述

我想每 X 天(在单元格中的日期之后)发送电子邮件提醒,直到用户更改行中的状态。

一次性日期条件很简单,例如:

If date = today OR date = today + 2 OR date = today + 4

在我的“设置”表上,我有一个“频率”设置,其中设置了电子邮件提醒之间的天数。

是否可以在 if 语句中放置循环?例如:

If today = date_in_cell OR today = date_in_cell + any multiple of X

IE - 单元格中的日期是星期一。我想在周三、周五、周日、周二、周四、ETC(永远)收到一封电子邮件。

标签: javascriptloopsdateif-statementgoogle-apps

解决方案


您正在寻找余数运算符 ( %)。您计算开始日期和今天之间的天数差异,然后如果该差异大于 0 并且该数字%天数为 0,那么您需要在这一天发送提醒:

var elapsed = Math.floor((today - dt) / ONE_DAY_IN_MS);
var sendEmail = elapsed > 0 && elapsed % days == 0;

现场示例:

var ONE_DAY_IN_MS = 1000 * 60 * 60 * 24; // Defined by the spec
function format(dt) {
  var rv = [dt.getFullYear()];
  var n = dt.getMonth()  + 1;
  rv.push(n < 10 ? "0" + n : n);
  var n = dt.getDate();
  rv.push(n < 10 ? "0" + n : n);
  return rv.join("-");
}
function test(dt, today, days) {
  var elapsed = Math.floor((today - dt) / ONE_DAY_IN_MS);
  var sendEmail = elapsed > 0 && elapsed % days == 0;
  console.log(format(dt), format(today), sendEmail ? "Yes" : "No");
}
document.getElementById("btn").addEventListener("click", function() {
  console.clear();
  var dt = new Date(2018, 0, 1); // Jan 1st
  var today = new Date(2018, 0, 1); // Jan 1st
  var days = +document.getElementById("days").value;
  for (var n = 0; n < 10; ++n) {
    today.setDate(today.getDate() + 1);
    test(dt, today, days);
  }
});
<input type="number" id="days" value="2">
<input type="button" id="btn" value="Show">


推荐阅读