1

我想创建一个条件来检查数组中元素的数据类型(由电子表格中的数据形成)是否是日期对象(因此,我可以操纵该日期的字符串格式,因为我不想要像这样的日期: Thu May 23 2013 00:00:00 GMT-0400 (EDT)但像这样:)23/05/2013

我使用这个函数从谷歌电子表格中获取日期:

function getRowAsArray(sheet, row) {
  var dataRange = sheet.getRange(row, 1, 1, 99);
  var data = dataRange.getValues();
  var columns = [];
  for (i in data) {
    var row = data[i];
    Logger.log("Got row", row);
    for(var l=0; l<16; l++) {
        var col = row[l];
        columns.push(col);
    }
  }
  return columns;
}

假设我的数据类型对象可以在data[i]数组元素之一中。最简单的方法是什么?

var text = data[i];

假设我的数据类型对象可以在 data[i]数组元素之一中。最简单的方法是什么?在一个 awnswer 中建议做这样的事情

 var data = getRowAsArray(sheet, sheet);
    for(var i=0; i<columns.length; i++) {
    var key = ":" + columns[i] + ":";

    if (data[i] instanceof Date) {
        var d = data[i]; //date from data[i]
        var m = d.getMonth() + 1; //months starts at 0
        var y = d.getFullYear();
        var day = d.getDate();
        data[i] = day + "/" + m + "/" +y;
    }          

谢谢你的帮助!

4

3 回答 3

3

您可以使用instanceof关键字。

if (data[i] instanceof Date) {
    //it's a date
} else {
   //it's not
}

要格式化日期,您可以这样做:

var d = new Date(), //date from data[i]
    m = d.getMonth() + 1, //months starts at 0
    y = d.getFullYear(),
    d = d.getDate();

console.log([d, m, y].join('/'));
于 2013-11-02T04:06:20.987 回答
2

不要忘记 GAS 有一个专门的方法来格式化日期

Utilities.format date(date,TZ,string representation);

您可以使用它来自定义显示日期的方式。

与其他答案中建议的字符串操作相比,这种方法有一些优点:

  • 它考虑了时区
  • 它可以使用更丰富的格式(如文本格式的月份)
  • 写起来更短;-)

这是一个示例函数来说明(阅读代码中的注释,我在电子表格本身中采用了时区参数,因此我们确定该参数不会出现错误)

function convertDatesToStrings(){
  var ss = SpreadsheetApp.getActiveSpreadsheet().getActiveSheet();
  var data = ss.getDataRange().getValues();
  for(n=0 ; n<data.length;++n){
    var row = data[n];
    for(var i=0; i<row.length; i++) {
      if (row[i] instanceof Date) {
        data[n][i] = "'"+Utilities.formatDate(row[i], SpreadsheetApp.getActiveSpreadsheet().getSpreadsheetTimeZone(), "dd/MM/yy");// is a string
        // added a ' before the string to ensure the spreadsheet won't convert it back automatically
        Logger.log('Array cell '+n+','+i+' modified to '+data[n][i])
      }          
    }
  }
  ss.getRange(1,1,data.length,data[0].length).setValues(data);// write back to sheet
}
于 2013-11-02T08:28:39.283 回答
2

这是一个简单的自定义日期验证函数:

function isDate(date) {
    return (date.constructor.name == 'Date');
}

于 2015-05-31T21:55:24.587 回答