日期类谷歌应用程序脚本的日期错误

时间:2012-07-13 16:18:38

标签: javascript google-apps-script

我在这里遇到的问题是,当我减去回到月末,而不是回到上个月的29或28时,程序开始减去几个月而不是几天。贝娄是我的完整代码,下面是它在谷歌电子表格中产生的输出。

function trying(){ 

  var date = new Date(); 
  var datechange = new Date();
  var array = new Array(7);

 for (var i = 0; i < 7; i++) {
    array[i] = new Array(0);
  }

  for ( var i = 0; i < 7; i++){ 
   days = i + 8
   datechange.setDate(date.getDate() - days);
   var tabName = Utilities.formatDate(datechange, 'MST', 'yyyy-MM-dd').toString(); 
       array[i][0] = tabName;
    }

  var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Want");
  sheet.getRange("B2:B8").setValues(array); 



}

这是生成的日期。

05/07/2012 04/07/2012 03/07/2012 02/07/2012 01/07/2012 30/06/2012 30/05/2012

3 个答案:

答案 0 :(得分:1)

Date.getDate()返回日期(1-31) - 所以你所做的不正确。

而是试试这个:

var ONE_DAY = 24 * 60 * 60 * 1000; //in milliseconds
for ( var i = 0; i < 7; i++){ 
  days = i + 8
  datechange.setDate(date.getTime() - (days * ONE_DAY));
  var tabName = Utilities.formatDate(datechange, 'MST', 'yyyy-MM-dd').toString(); 
     array[i][0] = tabName;
}

答案 1 :(得分:1)

你必须在你的循环中定义datechange,而不是在外面:

var date = new Date();

for ( var i = 0; i < 30; i++){ 
   days = i + 8
   var datechange = new Date();
   datechange.setDate(date.getDate() - i);
   console.log(datechange);
   }

答案 2 :(得分:0)

这是JavaScript日期的工作方式。有关详细信息,请参阅here