检查数组中元素的数据类型是否为日期对象的最简单方法是什么? [英] The simplest way of check if a data type of an element in an array is a date object?

查看:107
本文介绍了检查数组中元素的数据类型是否为日期对象的最简单方法是什么?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



我使用此函数从google电子表格中获取日期:

  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);
}
}
返回列;
}

将我的数据类型对象置于其中一个 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; //月开始于0
var y = d.getFullYear();
var day = d.getDate();
data [i] = day +/+ m +/+ y;
}

感谢您的帮助!

解决方案

别忘了GAS有一个专用方法来格式化日期

实用程序.format date(date,TZ,string representation);



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



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


  • 它将时区考虑在内

  • 它可以使用更丰富的格式(如文本格式的月份)

  • 写入时间更短; - )



下面是一个示例函数来说明(阅读代码中的注释,我在电子表格中使用了时区参数,所以我们确信没有错误可能来自这个参数)

  function convertDatesToStrings(){
var ss = SpreadsheetApp.getActiveSpreadsheet()。getActiveSheet();
var data = ss.getDataRange()。getValues();
for(n = 0; n var row = data [n];
for(var i = 0; i if(row [i] instanceof Date){
data [n] [i] ='+ Utilities.formatDate(row [i],SpreadsheetApp.getActiveSpreadsheet()。getSpreadsheetTimeZone(),dd / MM / yy); //是一个字符串
//在字符串之前添加一个'以确保电子表格获胜'不会自动将其转换回来
Logger.log('Array cell'+ n +','+ i +'修改为'+ data [n] [i])
}
}
$ b $ ss.getRange(1,1,data.length,data [0] .length).setValues(data); //写回工作表
}


I want to create a condition that checks if a data type of an element in an array (formed by data from a spreadsheet) is a date object (so, I can manipulate the string format of this date, because I don't want a date like this: Thu May 23 2013 00:00:00 GMT-0400 (EDT) but like this: 23/05/2013).

I get the date from the google spreadsheet using this function:

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;
}

Supose my data type object can be in one of the data[i] array elements. What is simplest way of doing it?

var text = data[i];

Supose my data type object can be in one of the data[i] array elements. What is simplest way of doing it? It was sugested in one awnswer to do something like this

 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;
    }          

Thanks for any help!

解决方案

Don't forget GAS has a dedicated method to format dates:

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

You can use it to customize the way you show dates.

This approach has a few advantages over the string manipulation suggested in the other answer :

  • it takes the time zone into account
  • it can use richer formats (like month in text format)
  • it's shorter to write ;-)

Here is an example function to illustrate (read comments in code, I took the time zone parameter in the spreadsheet itself so we're sure that no error can come from this parameter)

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
}

这篇关于检查数组中元素的数据类型是否为日期对象的最简单方法是什么?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆