我目前正在尝试使用他的Google Apps event manager中的Martin Hawksey blog,但我遇到了两个问题。
#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
任何和所有的帮助都将非常感激,最大和最重要的是那个约会....谢谢你
答案 0 :(得分:5)
对于问题#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)
是否会产生日期。请参阅this reference,您会发现它最终会被视为new Date(milliseconds)
。由于上面描述的错误,你得到了当前的日期...修复它,你会得到一个不同的日期,但仍然是一个约会。检查Detecting an "invalid date" Date instance in JavaScript,如果它在应用程序脚本中有效,它可能会提供更确定的测试。
以下是isDate()
的修复程序供您试用。它包含针对问题#1的修复,并从Detecting an "invalid date" Date instance in JavaScript提取isValidDate()
例程,以更准确地区分日期和数字。
// 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;
}