Google脚本无法识别日期

时间:2018-01-04 12:22:25

标签: date datetime google-apps-script google-sheets javascript-objects

我尝试编写一些代码来检查电子表格列中的值,看看它们是否是有效日期。但是,即使我在格式设置为日期的单元格中输入日期,它似乎也不会将其识别为日期。当我调试日期对象被列为"新日期"但如果我试图让Logger得到getDate(),我会收到以下错误:

  

TypeError:找不到对象中的函数getDate Sat Jun 05 2010 01:00:00 GMT + 0100(BST)。 (第15行,文件" myCode")

我可以通过调用' new Date()'将我的对象设置为日期。这意味着它们被识别为日期,但这会将所有对象更改为日期,无论它们是否应该。 这是我的代码:

function onMyPress(){
 var sheet = SpreadsheetApp.getActive().getActiveSheet()
 var myRange = sheet.getRange(2,2,8,1)
 var myValues = myRange.getValues()
 for (i=0; i<8; i++){
 var testDate = myValues[i]
 if (isDate(testDate)) {sheet.getRange(i+2,3,1,1).setValue("Date")
 }
 else{
 sheet.getRange(i+2,3,1,1).setValue("Not Date")
 }
 Logger.log(testDate.getDate())
 }
 }
 function isDate(testDate) {
 if (Object.prototype.toString.call(testDate) !== "[object Date]") {
 return false; 
 }
 else {
 return true;
 }
 }

谢谢你的期待。

2 个答案:

答案 0 :(得分:0)

&#34;在对象&#34;中找不到函数getDate表示您在不是Date对象的对象上调用getDate()。

我在猜测&#34; testDate&#34;是一个String对象?如果您单步执行代码,它是否会进入&#34; else&#34;条款?

你需要:

  1. 检查String对象是否包含格式正确的日期 (似乎就是这种情况)
  2. 然后将它转换为Date对象,如下所示:var realDate = new Date(testDate);
  3. 请参阅此处的工作示例: https://jsfiddle.net/uyowax8o/

    // Convert to Date object
    var realDate = new Date(testDate);
    
    // This now works
    alert(realDate.getDate());
    

答案 1 :(得分:0)

问题是getValues()返回一个2D数组,你的脚本分配一个“行”(a JavaScript数组)而不是下一行的testDate的单元格值(JavaScript字符串,日期等)

var testDate = myValues[i]

另一种方法是用以下内容替换上面的代码行:

var testDate = myValues[i][0]

假设您的日期在第一列。