【问题标题】:match two datetimes in javascript not working [duplicate]在javascript中匹配两个日期时间不起作用[重复]
【发布时间】:2013-07-07 18:30:15
【问题描述】:

我有两个约会:

date1 = "2013-07-08 12:30:00"

date2 = "2013-07-08 13:30:00"

现在在 javascript 中,我想匹配这两个日期,但它们不匹配,而不是我想删除约会,如果它们匹配则无事可做。

我试过这段代码,但它不起作用:

  if(date1 == date2)// Event already exists
  {
      // do nothing
  }
  else
  {
      // delete the record.
  }

我也尝试与“new Date(date1) == new Date(date2)”进行比较,但它也不起作用。

我的代码或日期格式有问题。谁能知道如何做到这一点以及我在这段代码中哪里错了?

提前致谢。

【问题讨论】:

  • 这两个日期永远不会相等,因为它不仅检查日期,而且检查时间。所以当它们转换为 DateTime 对象时,它永远不会匹配
  • 究竟是什么“不工作”?当作为字符串进行比较时,您提供的值对我来说很好。
  • 尝试 2013/07/08 12:30:00,而不是 2013-07-08 12:30:00,也可以尝试用 > 或
  • 实际上我的意思是从 date2 中减去 date1 并比较差异。但@adeneo 的回答似乎不错

标签: javascript jquery datetime


【解决方案1】:

Adeno 有一个有效的答案,但如果日期为毫秒,则将失败(如果您使用有效的日期字符串,则在 OP 的示例中不是这种情况)。为确保您按分钟或天数比较日期,您可以这样做:

function sameTime(dt1,dt2){
  //round the dates to the minutes
  var t1=new Date(dt1);
  var t2=new Date(dt2);
  t1.setSeconds(0,0);
  t2.setSeconds(0,0);
  return t1.toString()===t2.toString();
}
function sameDay(dt1,dt2){
  //round the dates to the day
  var t1=new Date(dt1);
  var t2=new Date(dt2);
  t1.setHours(0,0,0,0);
  t2.setHours(0,0,0,0);
  return t1.toString()===t2.toString();
}
function sameMonth(dt1,dt2){
  //round the dates to the month
  var t1=new Date(dt1);
  var t2=new Date(dt2);
  t1.setHours(0,0,0,0);
  t2.setHours(0,0,0,0);
  t1.setDate(1);
  t2.setDate(1);
  return t1.toString()===t2.toString();
}
var date1 = "2013-07-08T12:30:00",
    date2 = "2013-07-08T13:30:00";
var d1 = new Date(date1);
var d2 = new Date(date2);

console.log(sameTime(d1,d2));//precise to the minute
console.log(sameDay(d1,d2));//precise to the day
console.log(sameMonth(d1,d2));//precise to the month

【讨论】:

    【解决方案2】:

    它对我有用:

    var date1 = "2013-07-08 12:30:00";
    
    var date2 = "2013-07-08 12:30:00";
    var date3 = "2013-07-08 12:00:00";
    
    console.log(date1 == date2); //true
    console.log(date1 == date3); //false
    

    Jsfiddle link

    【讨论】:

    • 将变量命名为 date 并不会使它们成为日期对象。在比较原始类型时,您应该使用 ===
    • 请根据您的选择更改变量名称并使用===,现在检查它是否给您答案。请使用我提供的小提琴链接
    【解决方案3】:

    两个不同的对象永远不会相同,你必须比较组成 unix 时间戳的数字:

    var date1 = "2013-07-08 12:30:00",
        date2 = "2013-07-08 13:30:00";
    
    var d1 = new Date(date1);
    var d2 = new Date(date2);
    
    if (d1.getTime() == d2.getTime()) {
    
    }
    

    FIDDLE

    【讨论】:

    • 感谢 adeneo。但它总是给我虚假。
    • @Mausami 应该,12:30 与 13:30 不同
    • 是的,对不起。这是我的错误。非常感谢 HMR 和 adeneo。
    猜你喜欢
    • 2015-07-11
    • 2022-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-28
    • 2019-04-20
    • 2021-09-13
    相关资源
    最近更新 更多