【问题标题】:Comparing two dates(string) in JavaScript not working比较 JavaScript 中的两个日期(字符串)不起作用
【发布时间】:2019-05-06 13:23:27
【问题描述】:

我正在尝试使用 JavaScript 比较 Google App Scripts 中的 2 个日期。我遇到的问题是结果不正确,我在 Stackoverflow 上遵循了多项建议,但没有奏效。

这是我的代码:
- 这是从今天开始获取日期的代码 - 30 天

  var date = new Date();
  var last_30 = date.setDate(date.getDate() - 30);
  var delete_date = Utilities.formatDate(date, 'Etc/GMT', 'dd/MM/yyyy');

这是我的代码:
- 这是从日期格式的电子表格中获取值的代码

    var row = values[i];  // Values from Spreadsheet cells    
    var dt = new Date(row[0]);
    var year = dt.getFullYear();
    var month = dt.getMonth() + 1 ;
    var day = dt.getDate();      
    var cell_date_value = ('0' + dt.getDate()).slice(-2) + '/'
             + ('0' + (dt.getMonth()+1)).slice(-2) + '/'
             + dt.getFullYear();

    Logger.log('cell:'+cell_date_value + ' delete:'+delete_date);

    if (Date.parse(cell_date_value) > Date.parse(delete_date)) {  
      sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
      rowsDeleted++;
    }

这是我的 Logger.log():

[19-05-06 15:19:40:579 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:580 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:581 CEST] cell_value:03/05/2019  delete_before:06/04/2019
[19-05-06 15:19:40:581 CEST] cell_value:03/04/2019  delete_before:06/04/2019
[19-05-06 15:19:40:582 CEST] cell_value:03/03/2019  delete_before:06/04/2019
[19-05-06 15:19:40:583 CEST] cell_value:03/03/2019  delete_before:06/04/2019
[19-05-06 15:19:40:584 CEST] cell_value:03/02/2019  delete_before:06/04/2019

如您所见,最后 4 行的 cell_value 比 delete_before 旧,但在 if 语句下仍然没有拾取该单元格。 typeOf 是 string



我也试过这个:(没用):

var d1 = Date.parse(cell_value);
var d2 = Date.parse(delete_before);
if (d1 < d2) {
    alert ("Error!");
}

还有这个:

function isLater(str1, str2)
{
    return new Date(str1) > new Date(str2);
}

任何人都可以看到问题吗?

【问题讨论】:

  • 当你打算再次将delete_date转回Date实例时,为什么要将它格式化为字符串?
  • 随便dt &gt; new Date

标签: javascript date google-sheets


【解决方案1】:

我认为您可以尝试比较时间戳而不是时间对象

var d1 = Date.parse(cell_value).getTime();
var d2 = Date.parse(delete_before).getTime();
if (d1 < d2) {
    alert ("Error!");
}

getTime() 返回 1970 年花费的毫秒数,因此您可以轻松比较 2 个整数。

例如:

Date.parse(cell_value) != Date.parse(cell_value)

您正在比较 2 个对象实例。所以基本上你问的是同一个对象。这不是同一时间。

【讨论】:

  • 谢谢!这行得通。但是为什么我的代码不起作用?, .getTime() 应该起作用的原因是什么
  • @AliDurrani 当您想比较它们所代表的时间时,您可能一直在比较对象本身,这些对象本身正在通过一些任意规则进行比较(我不确定比较 JS 地图遵循什么规则)。
  • @AliDurrani 我已经扩展了答案
  • 啊。感谢您的澄清!现在明白了:)
【解决方案2】:
var date1 = new Date();
var date2 = new Date();
if(date1.getTime()>date.getTime())
{ 
  console.log("Date1 is greater")
}
else{
 console.log("Date2 is greater");

}

日期方法“getTime()”以毫秒为单位给出时间,可用于比较

【讨论】:

  • 使用 parse 方法解析日期如上答案所示。
【解决方案3】:
function date_splitter(date){
   var parts = date.split("/");
   return new Date(parts[2], parts[1] - 1, parts[0]);
}
if (date_splitter(cell_date_value) < date_splitter(delete_date)) {  
  sheet.deleteRow((parseInt(i)+1) - rowsDeleted);
  rowsDeleted++;
} 

成功了!

【讨论】:

  • 可能不正确......即使日期解析对我来说看起来也是错误的
猜你喜欢
  • 2013-10-31
  • 2013-01-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多