谷歌应用程序脚本事件管理器
Google Apps Script Event Manager
我目前正试图从Martin Hawksey的博客中使用他的谷歌应用程序事件管理器,但我遇到了两个问题。
#1)确认电子邮件中的日期是"今天"的日期&时间而不是事件日期&时间(这是他的原件,他从来没有修过)。大多数人都说这与这一部分不正确有关:
var variableData = isDate(data[normalizeHeader(templateVars[i])]);
email = email.replace(templateVars[i], variableData || "");
}
return email;
}
// Test if value is a date and if so format
function isDate(sDate) {
var scratch = new Date(sDate);
if (scratch.toString() == "NaN" || scratch.toString() == "Invalid Date") {
return sDate;
}
else {
return Utilities.formatDate(new Date(), TZ, "dd MMM yy HH:mm");
}
}
#2)我的另一个问题是连接指令的模板,我不能调用任何变量(即${"Invoice"}或${"Amount"}::相反,它返回"今天"的日期<--我添加了更多的单元格,并为每个单元格添加了一列,它们中有数据,并在脚本中进行了正确的调整;仍然没有。
前任。
Template: "Your Invoice # is: ${"Invoice"} and your total amount due is: ${"Amount"}"
Reality: "Your Invoice # is: 13 Feb 13 13:18 and your total amount due is: 13 Feb 13 13:18."
以下是我的完整剧本和我所做的修改(与他的原作没有太大区别):https://gist.github.com/hakarune/4985606
任何帮助都将不胜感激,但最重要的是那一天。。。。感谢
对于问题#1,isDate()
函数的注释表示,如果给定的sDate
是有效日期,则将返回该日期的格式化版本。但是对formatDate()
的调用经过new Date()
,这将是当前日期&时间相反,它应该通过new Date(sDate)
。
return Utilities.formatDate(new Date(sDate), TZ, "dd MMM yy HH:mm");
对于问题#2,看起来问题再次出现在isDate()
上。如果是日期,fillInTemplateFromObject()
函数将调用isDate()
来格式化模板数据,否则它将保持原样。问题是每个数字都将通过isDate()
检查,因为测试只是new Date(sDate)
是否会产生日期。请参阅此参考资料,您将看到它最终会被视为new Date(milliseconds)
。由于上述错误,您正在获取当前日期。。。解决这个问题,你会得到一个不同的日期,但仍然是一个日期。检查检测";无效日期";在JavaScript中的日期实例,如果它在应用程序脚本中工作,它可能会提供更具结论性的测试。
这里有一个isDate()
的修复程序供您尝试。它包括对问题#1的修复,并从"检测"中引入isValidDate()
例程;无效日期";JavaScript中的日期实例,以便更准确地区分日期和数字。
// From https://stackoverflow.com/questions/1353684
// Returns 'true' if variable d is a date object.
function isValidDate(d) {
if ( Object.prototype.toString.call(d) !== "[object Date]" )
return false;
return !isNaN(d.getTime());
}
// Test if value is a date and if so format
// otherwise, reflect input variable back as-is.
function isDate(sDate) {
if (isValidDate(sDate)) {
sDate = Utilities.formatDate(new Date(sDate), TZ, "dd MMM yy HH:mm");
}
return sDate;
}
如果你好奇的话,这是我在调试器中运行的测试代码。注释显示了调试器中显示为值的内容。
var TZ = "GMT"; // isDate() uses a global variable for TimeZone, let's try GMT
function myFunction() {
var a = new Date(); // Fri Feb 22 2013 20:48:07 GMT-0500 (EST)
var b = isDate(a); // "23 Feb 13 01:48"
var c = 142312; // 142312.0
var d = isDate(c); // 142312.0
var e = 'test string'; // "test string"
var f = isDate(e); // "test string"
var g = 'Feb 22, 2013' // "Feb 22, 2013"
var h = isDate(g); // "Feb 22, 2013"
debugger;
}
- 如何在elfinder插件(一个文件管理器插件)上获得上传前事件
- 谷歌标签管理器点击事件没有冒泡到家长
- 谷歌标签管理器,事件推送到数据层
- 使用 javascript 事件作为 google 跟踪代码管理器触发器
- Google 跟踪代码管理器 (GTM) 新事件侦听器代码出现问题
- 如何通过 Google 跟踪代码管理器跟踪通用分析事件
- 如何在绘图管理器控件的按钮上添加事件侦听器
- 如何编写防弹骨干js管理器?(或修复此示例中的委托事件)
- Google Analytics(分析)自定义事件在使用 Google 跟踪代码管理器时未触发
- 由谷歌地图绘制的矩形 绘图管理器不会触发鼠标移动事件
- 声音管理器2播放事件配置不起作用
- 如何在谷歌跟踪代码管理器中触发两个不同的基于gtm.timer的事件
- 使用谷歌标签管理器跟踪事件
- 如何使事件onchange的HTML输入对象不提示文件资源管理器
- 谷歌标签管理器中的谷歌分析事件跟踪
- 谷歌标签管理器,谷歌分析使单独的事件基于Javascript变量点击
- Google Maps API V3 -绘图管理器事件监听器被触发多次
- 添加绘图管理器后丢失绑定事件
- 跟踪滑动事件与谷歌标签管理器
- 谷歌应用程序脚本事件管理器