Date 理解Google脚本中的日期格式有问题

Date 理解Google脚本中的日期格式有问题,date,google-apps-script,google-sheets,simpledateformat,Date,Google Apps Script,Google Sheets,Simpledateformat,在前几年,我曾几次使用AppsScripts为简单任务使用GoogleSheets创建了一些函数。在从单元格/区域提取日期并处理它们时,我总是遇到问题,但不知何故,我总能找到一个解决办法,因此我不必处理它。嗯,这次我找不到解决方法,因此我将尝试用以下代码解释我的问题: function getDates(){ var s = SpreadsheetApp.getActiveSpreadsheet(); var sht = s.getSheetByName('Dates'); var dat

在前几年,我曾几次使用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日期”)在电子表格中的值为“9.6.21”。单元格的格式为日期,双击会打开日历。当我设置新单元格的值时(使用'outrng.setValue(date);'),结果是OK的,与原始单元格中的日期相同

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

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


我猜我缺少一些基本的东西。我花了很多时间试图理解它,所以非常感谢您的帮助

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

代码: 样本数据:

日志:

输出:

注:
  • 由于工作表的格式设置,工作表上的输出不等于日志

Read lower case mm是分钟的代码,如果替换此
var date=sht.getRange(2,1).getValues()与此
var date=sht.getRange(2,1.getValue()然后您可以单独使用日期如果您将新的日期()包装在数据值周围,则通常不太可能产生不一致的结果,因为能够从各种不同格式(包括字符串)呈现正确的日期()。感谢各位,这非常有帮助!非常感谢你!
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);  
}