【问题标题】:Google Scripts Timestamp - Format Output on EmailGoogle Scripts Timestamp - 电子邮件格式输出
【发布时间】:2020-11-03 18:59:45
【问题描述】:

我不确定我在这里做错了什么,这可能真的很简单......在搜索网络并尝试找到数百个不同的示例之后,我空手而归,无法获得所需的格式。我的脚本有效,发送电子邮件,所有值都在那里,但日期格式不是我们所追求的。所以,这是怎么回事:

我有一个基本脚本,当受访者提交表单时,它会从模板发送 HTML 电子邮件。需要时间戳、开始(日期和时间)、结束(仅限时间)值,并打印在 HTML 电子邮件中,但它显示的是完整的时间戳输出,例如:“Tue Nov 03 2020 11:39:28 GMT -0700(山地标准时间)"

我要做的是将电子邮件中显示的时间戳值格式化为:“Tue Nov 03 2020 HH:mm”

这是我正在使用的脚本:

function onFormSubmit(e) {
  var htmlBody = HtmlService.createTemplateFromFile('email');  
  var rng = SpreadsheetApp.getActiveSheet().getActiveRange();
  var timestamp = Utilities.formatDate(new Date(), "MST" , "MM-dd-yyyy | HH:mm:ss");
  var email = rng.getValues()[0];
  var body = HtmlService.createTemplateFromFile("email");
  var to = 'foo@bar';
  var subject = 'Activity Report ' + email[0] + '';
  
  htmlBody.timestamp = email[0];
  htmlBody.start = email[1];
  htmlBody.end = email[2];
  htmlBody.activityobserved = email[3];
  htmlBody.summary = email[4];
  htmlBody.actiontaken = email[5];
  htmlBody.attachments = email[6];
  
  var email_html = htmlBody.evaluate().getContent();
  
  MailApp.sendEmail({
    to: to,
    subject: subject,
    htmlBody: email_html,
    replyTo:'bar@foo',
  });
}

【问题讨论】:

  • 您在timestamp 中成功保存了一个格式化日期,但您没有在任何地方使用它。
  • 好吧。我知道我错过了什么!所以我将htmlBody.timestamp = email[0]; 更改为htmlBody.timestamp = timestamp;,这似乎效果很好。
  • 我对如何格式化开始和结束时间有点困惑。他们仍在显示完整的输出
  • 你可以在设置htmlBody.starthtmlBody.end时重复Utilities.formatDate()调用。
  • 详情见我的回答

标签: email google-apps-script


【解决方案1】:

不要忘记实际使用timestamp。要获得日期中的“星期二”部分,您可以使用“EEE”。我在下面设置了您在问题中指定的日期格式。

function onFormSubmit(e) {
  // ...
  var timestamp = Utilities.formatDate(new Date(), "MST" , "EEE MMM dd yyyy HH:mm");
  // ...
  htmlBody.timestamp = timestamp;
  htmlBody.start = Utilities.formatDate(email[1], "MST" , "EEE MMM dd yyyy HH:mm");
  htmlBody.end = Utilities.formatDate(email[2], "MST" , "EEE MMM dd yyyy HH:mm");
  // ...
}

【讨论】:

  • @Marios Type less haha​​...不过,使用new Date(email[n]) 可能更正确。我只是假设他使用getValues() 会返回一个有效日期。
【解决方案2】:

解决方案:

您没有在 htmlBody 对象中包含变量 timestamp。相反,您使用的是它的原始源值。

替换

htmlBody.timestamp = email[0];

htmlBody.timestamp = timestamp;

根据您的评论更新:

我对如何格式化开始和结束时间有点困惑。 他们仍在显示完整的输出。

假设您的工作表中有日期对象,

替换

 htmlBody.start = email[1];
 htmlBody.end = email[2];

htmlBody.start = Utilities.formatDate(new Date(email[1]), "MST" , "EEE MMM dd yyyy HH:mm");
htmlBody.end = Utilities.formatDate(new Date(email[2]), "MST" , "EEE MMM dd yyyy HH:mm");

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-12-13
    相关资源
    最近更新 更多