繁体   English   中英

在Google Apps脚本(JavaScript)中获取特定字符串格式的第二天日期

[英]Getting next day date for specific string format in Google Apps Script (JavaScript)

今天是个好日子! 我必须开始使用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时,问题在于您会从不了解GAS中某些特殊功能的人员那里得到很好的答案。

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

也就是说,实际上有一个“特殊”函数可以格式化日期字符串 ,我将在下面的代码中显示它。

但是,还有另一点可能会给您带来麻烦:如果您在约会对象中未提及小时数,那么如果您居住在使用夏令时的国家,则有可能转移一天的时间。 这个问题在该论坛和其他地方已经讨论过很多,因此我不会给出所有详细信息,但是在处理日期对象时考虑这一点是一个好主意。 在下面的代码中,我从刚创建的日期对象中提取了一个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

这听起来像是一个解析问题,您可能会比较幸运,将日期分开并单独放入参数,则遇到的任何错误将非常有用:-

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

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

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

将格式字符串传递给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();

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>​

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM