【问题标题】:Getting next day date for specific string format in Google Apps Script (JavaScript)在 Google Apps Script (JavaScript) 中获取特定字符串格式的第二天日期
【发布时间】:2012-12-04 08:59:38
【问题描述】:

大家好! 在一个项目上工作m我不得不开始使用 Google Spereadsheet 界面,并遇到了一个我无法快速克服的问题,因为以前没有使用过 JavaScript。 我有一个特定格式的日期作为字符串

var date = "2012-08-09";

我需要的是获得第二天的日期

date = "2012-08-10";

这不仅应包括更改日期,还应包括更改月份和年份(如有必要)。

我尝试过使用日期格式

  var datum= new Date(date);
  datum.setDate(datum.getDate() + 1);
  date = datum.toString('yyyy-MM-dd');

但代码似乎无法将日期写入基准变量。 解决这个小问题最好、最快捷的方法是什么?

谢谢

【问题讨论】:

    标签: javascript google-apps-script google-sheets google-spreadsheet-api


    【解决方案1】:

    当您将问题标记为“Javascript”并且实际使用 Google Apps 脚本时,问题在于您会从不了解 GAS 中某些特殊功能的人那里得到很好的答案。

    GAS 基于 Javascript,但 Javascript 不是 GAS...如果你明白我的意思 ;-)

    也就是说,实际上有a "special" function to format date string,我将在下面的代码中显示它。

    但还有一点可能会给您带来麻烦:如果您没有在日期对象中提及小时,那么如果您居住在使用夏令时的国家/地区,则有可能会改变一天。这个问题已经在这个论坛和其他地方经常讨论,所以我不会给出所有的细节,但是当你玩日期对象时考虑到这一点是个好主意。在下面的代码中,我从我们刚刚创建的日期对象中提取tz(时区)字符串以了解它是在夏季还是冬季,然后我使用这个tz 字符串作为Utilities.formatDate() 中的参数方法 。这保证了在每种情况下都能得到准确的结果。

    这是(最后)测试代码: (使用记录器查看结果。脚本编辑器>查看>日志)

    function test(){
      date = "2012-08-9";
      var parts = date.split('-')
      var datum = new Date(parts[0],parts[1]-1,parts[2],0,0,0,0);// set hours, min, sec & milliSec to 0
      var tz = new Date(datum).toString().substr(25,8);// get the tz string
      Logger.log(datum+'    in TimeZone '+tz)
      datum.setDate(datum.getDate() + 1);// add 1 day
      var dateString = Utilities.formatDate(datum,tz,'yyyy-MMM-dd');// show result like you want, see doc for details
      Logger.log(dateString);// the day after !
      }
    

    记录器结果:

    Thu Aug 09 2012 00:00:00 GMT+0200 (CEST)  in TimeZone GMT+0200
    2012-Aug-10
    

    【讨论】:

      【解决方案2】:

      这听起来像是一个解析问题,你可能运气更好,把日期分开并单独放入参数,你得到的任何错误都会很有用:-

      var parts = date.split("-");
      var datum = new Date(
        parseInt(parts[0], 10), 
        parseInt(parts[1], 10) - 1, 
        parseInt(parts[2], 10));
      

      JavaScript Date 对象没有内置格式化函数,但我不确定 google 应用程序 api 是否有任何不同。要执行代码的最后一行,您可能需要编写自己的函数来从 JavaScript 日期对象中提取数据并对其进行格式化,提示如果要确保日期中有两位数,您还需要编写一个 zerofill 函数和月份部分的输出。

      var formatted = datum.getFullYear() + "-" + 
        zerofill(datum.getMonth() + 1, 2) + "-" + 
        zerofill(datum.getDate(), 2);
      

      【讨论】:

      • 感谢您的回答!现在有错误日志但结果错误在 var datum= new Date(date); 之后基准是 1/1/1970 4:00:00 之后 datum.setDate(datum.getDate() + 1);基准是 1/1/1970 4:00:00 之后 date = datum.toString('yyyy-MM-dd');日期是无效日期
      • 我根据您的提示解决了我的问题,非常感谢!
      【解决方案3】:

      将格式字符串传递给 toString 在 .NET 中有效,在 Java 中也可能有效,但在 Javascript 中无效。 试试下面的,

      var date = "2012-08-09";
      var datum = new Date(date);
      datum.setDate(datum.getDate() + 1);
      date = datum.getFullYear() + "-" + (datum.getMonth() + 1) + "-" + datum.getDate();
      

      【讨论】:

        【解决方案4】:

        http://jsfiddle.net/ 中尝试以下操作,它可以工作.....

        <html>
        <head>
            <script>
                function foo(){
                    var date = "2012-08-09";
                    var datum = new Date(date);
                    datum.setDate(datum.getDate() + 1);
                    date = datum.getFullYear() + "-" + (datum.getMonth() + 1) + "-" + datum.getDate();       
                    document.getElementById("demo").innerHTML = date;
                }
            </script>
        </head>
        <body onload="foo()">
            <p id=demo></p>
        </body>
        </html>​
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2014-05-29
          • 2017-04-09
          • 2016-10-10
          • 1970-01-01
          • 1970-01-01
          • 2018-01-08
          相关资源
          最近更新 更多