gpt4 book ai didi

javascript - Google Apps 脚本事件管理器

转载 作者:行者123 更新时间:2023-11-28 16:05:55 26 4
gpt4 key购买 nike

我目前正在尝试使用 Martin Hawksey 的 Google Apps event manager来自他的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

非常感谢任何和所有的帮助,但最重要和最重要的是那个日期......谢谢你

最佳答案

对于问题 #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 ,如果它在 apps-script 中有效,它可能会提供更具决定性的测试。

这里有一个 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;
}

关于javascript - Google Apps 脚本事件管理器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14958334/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com