日期对象无法在谷歌脚本(javascript)中捕捉比较

时间:2012-10-12 19:06:43

标签: javascript google-apps-script

我有一个脚本,它将两个日期相互比较。但两者都有所不同。一个我转换为字符串格式Mo /天/年然后转换为日期格式。另一个是直接用于已经采用日期格式的谷歌电子表格单元格。但是当我对它们进行比较时,即使日期在比较范围内也不起作用。这是我的代码:

 function formatDate(someDate){
  var x = someDate.split("T");
  var v = x[0].split("-");
  var newDate = new Date();
  newDate.setFullYear(v[0],(v[1]-1),v[2]);
  //var newDate = v[1]+"/"+ v[2]+"/"+v[0];

  return newDate;
  }

 //calling formatDate within another function
 if(startDate != ''){
    if(singleCard[j].date != undefined){
      var k = singleCard[j].date;
      var f = formatDate(k);
      var dt = new Date(f);

 if(dt >= startDate && dt <= endDate){  //date comparison
   //do something here
 }

开始/结束日期的格式为:

    Fri Oct 12 2012 00:00:00 GMT-0700 (PDT)

singleCard [j]。日期以字符串形式出现:

    "2012-10-12T16:57:51.517Z"

然后我用:

   var f = formatDate(date) -> var dt = new Date(f)

处理它。
我不确定我在这里做错了什么。感谢。

1 个答案:

答案 0 :(得分:0)

当你这样做时

var newDate = v[1]+"/"+ v[2]+"/"+v[0];

您确定按正确的顺序使用了年/月/日吗?

您是否尝试记录var dt = new Date(f);的结果以将其值视为日期对象?

抱歉,如果我的问题显而易见,但由于我不知道您当地的日期设置,我无法确定您是如何处理的。(我所在的国家/地区使用的是dd / mm / yyyy所以我以前常常遇到问题;)

编辑:刚刚看到您的评论......不应该是v[0]+"/"+ v[1]+"/"+v[2](yyyy / mm / dd)

编辑2 :我认为你在使用setFullYear()时也必须提供hh mm ss参数;

类似

 newDate.setFullYear(v[0],(v[1]-1),v[2],0,0,0,0);

为了让它运转起来。由于你正在使用<=>=比较,因此将hh mm ss和mSec设置为0也是必要的(即使是强制性的),如果你让小时数,则Equality可能永远不会成立,分钟,秒和毫秒可以自由地生活。

不要忘记日期对象总是随着时间的推移完成日期,即使您没有显示/使用它们。