Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/397.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google脚本:Javascript日期调用返回NaN_Javascript_Date_Google Apps Script_Nan - Fatal编程技术网

Google脚本:Javascript日期调用返回NaN

Google脚本:Javascript日期调用返回NaN,javascript,date,google-apps-script,nan,Javascript,Date,Google Apps Script,Nan,谢谢大家的关注 我有一段相同的代码,包含在同一个Google脚本项目中的两个独立函数中。代码只是一个基本循环,用于匹配给定日期,然后使用索引从电子表格中获取值。具体问题是: var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0); 代码在一个函数中运行良好;但是,在另一个函数中,它返回NaN。我把循环结构从一个函数复制粘贴到另一个函数,所以我不明白为什么它不起作用。我已经尝试了我能想到的每一种可能的操作方法,但似乎没

谢谢大家的关注

我有一段相同的代码,包含在同一个Google脚本项目中的两个独立函数中。代码只是一个基本循环,用于匹配给定日期,然后使用索引从电子表格中获取值。具体问题是:

var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);
代码在一个函数中运行良好;但是,在另一个函数中,它返回NaN。我把循环结构从一个函数复制粘贴到另一个函数,所以我不明白为什么它不起作用。我已经尝试了我能想到的每一种可能的操作方法,但似乎没有什么能解决这个问题

编辑:功能1不工作。功能2起作用

有人能指出任何错误或提供一些指导吗?我使用的是Chrome,同样的问题也发生在FF中

编辑2:谢谢你给了我一些想法。根据要求,我已经发布了这些函数的代码(它们不是很长,所以我发布了全部内容)。此处引用的“数据”表只是一个带有日期和一些相应数据的电子表格。同样,我遇到的问题是var pmsDate在函数2中正确地返回了一个DateString,但在函数1中返回了NaN,尽管使用了完全相同的数据数组。谢谢你的帮助

职能1:

function getMonthlyRooms(month) {

  var forecastMonth = getMonthDigit(month);
  var monthDays = daysInMonth(month);
  var year = getYear();

  var startDate = new Date(year, forecastMonth, 1, 0, 0, 0, 0);

  var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var sheetDataCols = sheetData.getDataRange().getNumColumns();
  var sheetDataRows = sheetData.getDataRange().getNumRows();


  // find column header indexes

  var dataHeaders = sheetData.getRange(1, 1, 1, sheetDataCols).getValues();

  for (i = 0; i < sheetDataCols; i++) {
    if (dataHeaders[0][i] == "CONSIDERED_DATE") {
      var dateColIndex = i;
    }
    if (dataHeaders[0][i] == "NO_ROOMS") {
      var roomsColIndex = i;
    }
  }


  // find what row the month begins

  var data = sheetData.getDataRange().getValues();

  for (j = 0; j < sheetDataRows; j++) {
    var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);

    if (pmsDate == startDate) {
      var startRow = j + 1;
    }
  }


  // loop through range and sum

  var monthData = sheetData.getRange(startRow, (roomsColIndex + 1), monthDays, 1).getValues();

  var occRooms = 0;

  for (var k in monthData) {
    occRooms += monthData[k][0];
  }

  return occRooms;  

}
函数getmonthlyroms(月){
var forecastMonth=getMonthDigit(月);
var monthDays=日/月(月);
var year=getYear();
var startDate=新日期(年、预测月、1,0,0,0);
var sheetData=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“数据”);
var sheetDataCols=sheetData.getDataRange().getNumColumns();
var sheetDataRows=sheetData.getDataRange().getNumRows();
//查找列标题索引
var dataHeaders=sheetData.getRange(1,1,1,sheetDataCols.getValues();
对于(i=0;i
职能2

function getDailyRooms(date) {

  var forecastDate = new Date(date).setHours(0, 0, 0, 0);

  var sheetData = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Data");
  var sheetDataCols = sheetData.getDataRange().getNumColumns();
  var sheetDataRows = sheetData.getDataRange().getNumRows();


  // find column header indexes

  var dataHeaders = sheetData.getRange(1, 1, 1, sheetDataCols).getValues();

  for (i = 0; i < sheetDataCols; i++) {
    if (dataHeaders[0][i] == "CONSIDERED_DATE") {
      var dateColIndex = i;
    }
    if (dataHeaders[0][i] == "NO_ROOMS") {
      var roomsColIndex = i;
    }
  }


  // loop through data

  var data = sheetData.getDataRange().getValues();

  for (j = 0; j < sheetDataRows; j++) {
    var pmsDate = new Date(data[j][dateColIndex]).setHours(0, 0, 0, 0);

    if (pmsDate == forecastDate) {
      var occRooms = sheetData.getRange(j + 1, roomsColIndex + 1).getValue();
    }
  }

  return occRooms;

}
函数getDailRooms(日期){ var forecastDate=新日期(日期).setHours(0,0,0,0); var sheetData=SpreadsheetApp.getActiveSpreadsheet().getSheetByName(“数据”); var sheetDataCols=sheetData.getDataRange().getNumColumns(); var sheetDataRows=sheetData.getDataRange().getNumRows(); //查找列标题索引 var dataHeaders=sheetData.getRange(1,1,1,sheetDataCols.getValues(); 对于(i=0;i
您是否尝试过以1而不是0开始循环?这样做将允许跳过标题值(只是一个想法)

我的猜测是函数使用的数据或逻辑存在差异,导致您无法处理边缘情况。简化调试的一种方法是将共享代码放在单个函数中,而不是有两个副本。这样可以更容易地看到数据输入和输出。

为什么Date函数中有这么多参数?我以为只有3个用逗号隔开。你查过开始日期了吗

var startDate = new Date(year, forecastMonth, 1, 0, 0, 0, 0);

您是否添加了调试并查看它何时失败?失败时的值是多少?您所说的“返回值”是什么意思?这个函数应该返回一个值吗?如果是,相关代码(包括返回调用)在哪里?如果没有,完整的错误消息是什么,行号是多少?我已经调试并使用气体记录器来确保脚本返回值。函数1调试产生:“pmsDate/Number/NaN”。函数2调试产生“pmsDate/Date/DateString”,这就是它应该做的@starbolin:完全相同的代码会产生两种不同的结果-GIGO是如何产生的?@chris2964不可能用这么小的代码来帮助你。问题很可能不在您发布的这段代码中。请发布一个简化版本的代码,但完整的,我们可以运行和再现的问题。强调“在这里工作,在那里不工作”没有帮助。我(仔细地)重新编写了好几次这些函数,但出于某种原因,对同一数据电子表格的相同调用会产生两种不同的结果。我肯定我遗漏了一些简单的东西——但看起来我不得不继续戳它。我的javascript一点也不高级,但我没有看到任何明显的错误-你知道吗?Date()也可以包括小时、分钟、秒、毫秒。需要将时间部分设置为零,否则比较将不起作用。