【问题标题】:Problem with understanding date formats in googleScripts在 googleScripts 中理解日期格式的问题
【发布时间】:2021-04-05 20:10:59
【问题描述】:

我在前几年使用 AppsScripts 为简单的任务使用 GoogleSheets 制作了一些函数。从单元格/范围获取日期并处理它们时,我总是遇到问题,但不知何故总是找到一种解决方法,所以我不必处理它。好吧,这次我找不到解决方法,所以我将尝试用以下代码解释我的问题:

function getDates(){
 var s = SpreadsheetApp.getActiveSpreadsheet();
 var sht = s.getSheetByName('Dates');
 var date = sht.getRange(2,1).getValues();  
 Logger.log(date[0][0]); //output is Tue Jun 08 18:00:00 GMT-04:00 2021

 var datumFilter= Utilities.formatDate(date[0][0], "GMT+1", "dd/mm/yy");
 Logger.log(datumFilter); //output is 08/00/21

 var outrng = sht.getRange(25,1);  
 outrng.setValue(date);
}

第一个目标单元格('var date')在电子表格中的值为“9.6.21”。该单元格被格式化为日期,双击时会打开一个日历。当我设置新的单元格值(使用'outrng.setValue(date);')时,结果是好的,与原始单元格中的日期相同。

但是我不需要简单地传输值,我想在一些循环中实现它们,我不知道如何简单地获取与脚本中相同格式或至少相同日期的日期细胞。正如您从记录器中看到的那样,那里的值是不同的。一个简单的 d/m/yy 格式就足够了。

我的电子表格设置设置为我的当地时间(斯洛文尼亚,GMT+1)。

我猜我在这里遗漏了一些基础知识。我花了很多时间试图理解它,所以非常感谢任何帮助!

【问题讨论】:

  • 阅读this小写mm是分钟的代码
  • 如果你用这个var date = sht.getRange(2,1).getValue(); 替换这个var date = sht.getRange(2,1).getValues();,那么你可以单独使用日期
  • 如果您将 new Date() 包裹在数据值周围,通常不太可能产生不一致的结果,因为 Date() constructor 能够从各种不同的格式(包括字符串)呈现正确的 Date()。
  • 谢谢大家,帮了大忙!

标签: date google-apps-script google-sheets simpledateformat


【解决方案1】:

Cooper 已经在评论中回答了您的所有问题。我想补充一点,向你展示一个关于它想要什么的例子,并添加一些修改。

代码:

function getDates() {
  var s = SpreadsheetApp.getActiveSpreadsheet();
  var sht = s.getSheetByName('Dates');
  // get last row of the sheet
  var lastRow = sht.getLastRow();
  // get your sheet's timezone
  var timezone = SpreadsheetApp.getActive().getSpreadsheetTimeZone();
  var output = [];

  // getValues is mostly used for multiple cells returning a 2D array
  // use getValue for single cells to return its actual value
  // but since function name is getDates, I assume column A is all dates
  // so we fetch the whole column (A2:A[lastRow]) except the header
  var dates = sht.getRange("A2:A" + lastRow).getValues();

  // for each date on that column, we format the date to d/M/yy
  // m/mm = minute
  // M/MM = month
  dates.forEach(function ([date]){
    Logger.log(date);
    var datumFilter= Utilities.formatDate(new Date(date), timezone, "d/M/yy");
    Logger.log(datumFilter);
    // collect all dates in an array
    output.push([datumFilter]);
  });
  // assign all the dates in the array onto range B2:B
  sht.getRange(2, 2, output.length, 1).setValues(output);  
}

样本数据:

日志:

输出:

注意:

  • 由于我的工作表格式,工作表上的输出不等于日志。

【讨论】:

  • 非常感谢!
猜你喜欢
  • 2011-09-20
  • 1970-01-01
  • 1970-01-01
  • 2011-10-03
  • 2021-10-08
相关资源
最近更新 更多