【问题标题】:Add 1 day to date from spreadsheet via Google App Script / Javascript- Month Keeps Reseting to current month通过 Google App Script / Javascript 从电子表格中添加 1 天 - Month Keeps Resetting to current month
【发布时间】:2020-05-04 09:48:39
【问题描述】:

我正在尝试设置一个 Google App 脚本函数,该函数从价差的最后一列中获取日期(格式为 dd/mm/yy),并创建一个包含日期 + 一天的新列。

我已经看过以前的解决方案并尝试使用相同的解决方案,即newDate.setDate(lastDate.getDate()+1),但在脚本中正确格式化值时遇到了问题。这是我的代码的一个变体,我用它来循环遍历一年的值,看看我得到了什么:

for (var i=0;i<365;i++){

    var lastRow = outputSheet.getLastRow();
    var newDate = new Date();

    var lastDate = outputSheet.getRange(lastRow,1).getValue();
    var newDateRng = outputSheet.getRange(lastRow+1,1);
    Logger.log(lastDate + 1, typeof lastDate, typeof (lastDate + 1));
    newDate.setDate(lastDate.getDate());
    Logger.log(newDate);
    newDate.setDate((newDate.getDate() + 1));
    Logger.log(newDate);
    var newDateFormatted = Utilities.formatDate(newDate, ss.getSpreadsheetTimeZone(), "dd/MM/YY");
    Logger.log(newDateFormatted);
    newDateRng.setValue(newDateFormatted);
}

开始日期为“01/03/2020”,我得到以下行为:

2020 年 1 月 3 日

2020 年 2 月 5 日

03/05/2020

...

31/05/2020

01/06/2020

2020 年 2 月 5 日

03/05/2020

...

31/05/2020

01/06/2020

2020 年 2 月 5 日

...

等等。一路过年。虽然天数增加了,但该月似乎在该月的第一天之后重置。

作为说明,我特别希望从电子表格中选择日期,而不是将新日期用作今天,将新日期 +1 用作明天。

谢谢

【问题讨论】:

    标签: javascript date google-apps-script


    【解决方案1】:

    您需要在循环中使用不同的变量,否则您将始终返回同一月份。

    同时避免使用字符串作为结果,保留日期对象并正确显示。

    代码如下:

    function otherTest(){
      var lastDate = SpreadsheetApp.getActiveSheet().getActiveCell().getValue();
      var date = new Date(lastDate); // create new date object
      var result = [];
      for (var i=0;i<365;i++){
        date=new Date(date).setDate(new Date(date).getDate()+1)
        Logger.log('date='+new Date(date))
        result.push([new Date(date)]);
      } 
      SpreadsheetApp.getActiveSheet().getRange(1,2,result.length,1).setValues(result).setNumberFormat('dd/MM/yyyy');
    }
    

    【讨论】:

    • 太好了,谢谢这个工作。我赞成您的回答,但我不认为这表明我的声誉太低。所以,为了确保我更好地理解这一点,而不是在我想更改它时调用date,我需要使用new Date(date) 来确保它被作为日期对象处理?
    • 在循环的每一步中作为一个新的日期对象。感谢您的接受和支持。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-05
    • 2013-07-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-21
    • 1970-01-01
    相关资源
    最近更新 更多