将数组字符串转换为Google Apps脚本中的日期数组

时间:2014-07-26 07:31:46

标签: arrays google-apps-script

我有一个Google表格电子表格。在B列中,我有一个字符串列表,它们是日期或日期范围,格式为月/日。例如:

7/26
7/27-7/31
8/1
8/2
8/3-8/5

我想创建一个数组,左边第一个日期,右边第二个日期(如果有)。如果没有第二个日期,则可以留空。这就是我想要的:

[7/26,]
[7/27,7/31]
[8/1,]
[8/2,]
[8/3,8/5]

我试过了:

var r = 'B'
var dateString = sheet.getRange(dateColumns[r] + '1:' + dateColumns[r] + lastRow.toString()).getValues();
var dateArr = Utilities.parseCsv(dateString, '-');

但这只是保持连接所有值。此外,如果可以将输出放在一个非常好的日期格式中。

1 个答案:

答案 0 :(得分:1)

这是一个很有趣的练习......

这是一个可以满足您需求的代码:

function test(){
  convertToDateArray('7/26,7/27-7/31,8/1,8/2,8/3-8/5');
}

function convertToDateArray(inputString){
  if(typeof(inputString)=='string'){inputString=inputString.split(',')}; // if input is a string then split it into an array using comma as separator
  var data = [];
  var datesArray = [];
  for(var n in inputString){
    if(inputString[n].indexOf('-')==-1){inputString[n]+='-'};// if only 1 field add an empty one
    data.push(inputString[n].split('-'));// make it an array
  }
  Logger.log(data);//check
  for(var n in data){
    var temp = [];
    for(var c in data[n]){
      Logger.log('data[n][c] = '+ data[n][c]);
      var date = data[n][c]!=''? new Date(2014,Number(data[n][c].split('/')[0])-1,Number(data[n][c].split('/')[1]),0,0,0,0) : '';// create date objects with right values
      Logger.log('date = '+date);//check
      temp.push(date);
    }
    datesArray.push(temp);//store output data in an array of arrays, ready to setValues in a SS
  }
  Logger.log(datesArray);
  var sh = SpreadsheetApp.getActive().getActiveSheet();
  sh.getRange(1,1,datesArray.length,datesArray[0].length).setValues(datesArray);
}

datesArray的记录器结果:

[[Sat Jul 26 00:00:00 GMT+02:00 2014, ], [Sun Jul 27 00:00:00 GMT+02:00 2014, Thu Jul 31 00:00:00 GMT+02:00 2014], [Fri Aug 01 00:00:00 GMT+02:00 2014, ], [Sat Aug 02 00:00:00 GMT+02:00 2014, ], [Sun Aug 03 00:00:00 GMT+02:00 2014, Tue Aug 05 00:00:00 GMT+02:00 2014]]