【问题标题】:Apps Script Trigger Fails to Get Current DateApps 脚本触发器无法获取当前日期
【发布时间】:2018-04-15 15:13:12
【问题描述】:

我创建了一个Apps Script 来编译数据并将结果保存到一个新的Google Sheet

代码使用new Date() 获取当前日期,并将其用于查询并命名它创建的新工作表。

以下是代码的相关部分:

function exportPayroll(setDate){
  var date = new Date();
  var newWeek = Utilities.formatDate(_getSunday(date),"GMT", "MM/dd/yyyy");
  for (var company in companies){
    getPayroll(companies[company],newWeek);
  }
}
function _getSunday(d) {
  d = new Date(d);
  var day = d.getDay(),
      diff = d.getDate() - day + (day == 0 ? -7:0); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

如果我手动运行exportPayroll,我会得到我期望的确切结果。所以,我设置了这个触发器来自动化这个过程:

触发器运行时,日期值为12/31/1969,而不是今天。

为什么它与触发器的行为不同?检查执行记录,我没有看到任何错误消息。

有没有更好的方法通过触发器获取今天的日期?

【问题讨论】:

  • _getSunday(d) 运行时,d 已经是一个日期。您不需要从已经是日期对象的东西中创建新的日期对象。如果函数_getSunday(d) 被多个地方调用,并且有时d 不是日期,那么您需要测试d 是否为对象。 if (typeof d !== 'object') {d = new Date(d)}

标签: date google-apps-script triggers


【解决方案1】:

因为你只是不想得到前一个星期天的日期。尝试以这种方式运行它。

function getLastSunday() {
  var d = new Date();
  var day = d.getDay();
  var diff = d.getDate() - day + (day == 0 ? -7:0); // adjust when day is sunday
  return new Date(d.setDate(diff));
}

function exportPayroll(){
  var newWeek = Utilities.formatDate(getLastSunday(),"GMT", "MM/dd/yyyy");
  for (var company in companies){
    getPayroll(companies[company],newWeek);
  }
}

【讨论】:

  • 这似乎有效。但是,有什么不同呢?为什么我不能在exportPayroll 中获取日期并将其传递给getLastSunday
猜你喜欢
  • 2015-10-03
  • 1970-01-01
  • 1970-01-01
  • 2023-04-09
  • 2016-12-08
  • 1970-01-01
  • 1970-01-01
  • 2017-12-30
相关资源
最近更新 更多