提问者:小点点

从列中抓取日期列表并将其格式化为MM/dd/yyyy


我正在尝试编写一个程序,只应用于日期与当前日期匹配的行。我知道如何在MM/dd/yyyy中设置当前日期的格式,但在循环列表并将日期设置为用于比较的列表时遇到了问题。任何建议都有帮助,谢谢!

function date() {
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "M/dd/yyyy")
  console.log(curDate)

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1'); // get the sheet
  var columnF = sheet.getRange(2, 5, sheet.getLastRow() - 1, 1); // get all the rows

  var fValues = columnF.getValues(); // get the values
  console.log('fvalues are; ', fValues)
  var format = []
  var datecolumn = sheet.getRange(2, 5, sheet.getLastRow() - 1, 1)

  for (var i = 2; i < 4; i++) {
    var datecolumn = sheet.getRange(i, 5).getValue();
    format.push(datecolumn)
  };
  console.log('date array is: ', format)

  var format2 = []
  for (var i = 0; i < fValues.length; i++) {

    var fmtcell = Utilities.formatDate(fValues, "GMT-5", "MM/dd/yyyy")

    format2.push(fmtcell)
  }
}

共2个答案

匿名用户

如果我理解正确的话,您需要比较一组日期,位于Sheet1中的列E中,与当前日期,以及将这些日期格式化为特定格式。

如果是这种情况,您可以执行以下操作(检查内联注释):

function dateCompare() {
  var curDate = Utilities.formatDate(new Date(), "GMT+1", "MM/dd/yyyy");
  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName('Sheet1');
  // Retrieve list of dates in column E (formatted as current date):
  var firstRow = 2;
  var column = 5;
  var numRows = sheet.getLastRow() - firstRow + 1;
  var dates = sheet.getRange(firstRow, column, numRows).getValues().map(function(date) {
    return Utilities.formatDate(new Date(date[0]), "GMT+1", "MM/dd/yyyy");
  });
  dates.forEach(function(date, i) { // Iterate through each date in column E
    if (date === curDate) { // Compare each date in column E to current date
      // Do something to the row:
      var row = sheet.getRange(firstRow + i, 1, 1, sheet.getLastColumn());
    }
  });
}

请考虑getVales()返回二维数组。您可以将此2D转换为一维数组,并使用map同时格式化数组中的日期。

  • 公用事业。formatDate(日期、时区、格式)

匿名用户

function formatDate() {
  var ss=SpreadsheetApp.getActive();
  var sh=ss.getSheetByName('Sheet1');
  var dt=new Date();
  var dtv=new Date(dt.getFullYear(),dt.getMonth(),dt.getDate()).valufOf();
  var colfR=sh.getRange(2,5,sh.getLastRow()-1,1);
  var colfV=colfR.getValues(); 
  var colfF=colfR.getNumberFormats();
  for (var i=0;i<colfV.length;i++) {
    var dtf=new Date(colfV[i][0]);
    var dtfv=new Date(dtf.getFullYear(),dtf.getMonth(),dtf.getDate()).valueOf();
    if(dtfv===dtv){colfF[i][0]="MM/dd/yyyy";}
  }
  colfR.setNumberFormats(colfF)
}