3

今天是个好日子!在一个项目上工作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');

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

谢谢

4

4 回答 4

1

当您将问题标记为“Javascript”并且实际使用 Google Apps 脚本时,问题在于您会从不了解 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
于 2013-03-22T22:33:44.390 回答
0

将格式字符串传递给 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();
于 2012-12-04T09:44:45.917 回答
0

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

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

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

var formatted = datum.getFullYear() + "-" + 
  zerofill(datum.getMonth() + 1, 2) + "-" + 
  zerofill(datum.getDate(), 2);
于 2012-12-04T09:08:05.927 回答
0

在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>​
于 2012-12-04T13:17:52.953 回答