0

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

 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].date 以字符串形式出现:

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

然后我使用:

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

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

4

1 回答 1

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,因为您正在使用 a<=>=比较,如果您让 hours 、 minutes 、 seconds 和 milliseconds 自由地生活,平等可能永远不会成立生活。

不要忘记日期对象总是带有时间的完整日期,即使您不显示/使用它们也是如此。

于 2012-10-12T19:35:28.443 回答