我目前正试图用马丁Hawksey对谷歌Apps的事件管理器从他的博客 ,但我遇到了两个问题。
#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)我的另一个问题是在模板加盟说明我不能叫,任何变量(如$ {“发票”}或$ {“金额”} ::而是返回“今天”日期< -我增加了更多的细胞,并添加一列每个并且他们在他们拥有的数据,并提出在脚本正确的调整,仍然一无所获。
恩。
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中“无效的日期” Date实例 ,它可提供更确凿的测试,如果它工作在应用程序脚本。
这里有一个固定isDate()
您可以尝试。 它包括问题#1的修复,并在拉isValidDate()
从日常工作中的JavaScript检测“无效的日期” Date实例 ,以日期和数字之间更准确的区分。
// 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;
}