javascript - 如果今天 = 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(永远)收到一封电子邮件。
解决方案
您正在寻找余数运算符 ( %
)。您计算开始日期和今天之间的天数差异,然后如果该差异大于 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">
推荐阅读
- selenium-webdriver - 按钮单击但未单击
- angular - 在 Angular 中使用 forkJoin 时的可重用搜索
- amazon-web-services - 在免费 AWS 层上运行 LAMP 和 Certbot 的 Ubuntu 出现 SSL 超时问题
- php - 通过ajax发送一个php var
- python - 使用 row 函数获取 nan。但是,在将行与 nan 进行比较时,条件变为 False
- docusignapi - 如何在 NetSuite 中将文件(例如 PDF)编码为 base64
- c# - 从不在 MyList 中的实体中选择
(字段)使用实体框架 - php - 使用一个键数组过滤另一个数组,保持“顺序”
- rust - 将参数/标志传递给`build.rs`
- matlab - 在matlab的列中拆分行