使用不同格式的Javascript比较两个日期

时间:2017-05-04 05:33:28

标签: javascript jquery date

目前我正在使用JavaScript项目(使用节点的聊天应用程序)。我必须显示时间和日期以及聊天消息。如果今天收到消息,只需要显示当前时间,如果前几天收到消息,则需要显示日期和时间。我目前的问题是,如何将当前日期与收到消息的日期进行比较。为了获得当前日期,我使用了bleow函数

var dt = new Date();

以上代码将当前日期返回为

  

2017年5月4日星期四10:27:12 GMT + 0530(IST)

但是从mySql db获取的消息日期如下:

  

2017-05-04T04:26:37.000Z

我没有任何条款告诉后端开发人员更改他们发送的日期格式。所以现在我该怎么办? 我要做的就是这样

if(dt>historyDate){
   // print the time only
   }
else{
   //print date and time
}

在上面的代码中,dt是当前的日期和时间,historyDate是从DB发送的日期和时间。 那么如何比较这两个日期呢? 如果需要更多细节,请发表评论。

7 个答案:

答案 0 :(得分:2)

只需使用Date.parse 它返回自1970年1月1日以来的毫秒数

var t1 = Date.parse("2017-05-04T04:26:37.000Z") // returns 1493871997000
console.log(t1);
var t2 = Date.parse("Thu May 04 2017 10:27:12 GMT+0530") // returns 1493873832000
console.log(t2);

然后你可以继续比较两个值,因为它们都是数字。

答案 1 :(得分:0)

我已经创建了一个用于发布时间查找的JavaScript函数。它将有助于找到您的不同。它们会发现与发布时间和当前时间不同。getTime()获得毫秒然后通过{{1}它会找到差异



var d = new Date("2017-05-04T04:26:37.000Z")
console.log(timecheck(d.getTime()))

function timecheck(data) {
  data = Number(data);
  var m = ['Jan', 'Feb', 'Mar', 'Aprl', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
  var w = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'];
  var res = "";
  var d = Date.now();
  var c = d - data;
  x = c / 1000;
  seconds = Math.floor(x % 60);
  x /= 60
  minutes = Math.floor(x % 60);
  x /= 60
  hours = Math.floor(x % 24);
  x /= 24
  days = Math.floor(x);

  if (days > 0) {
    res = ' yesterday';
    if (days > 1) {
      var n = new Date(data);
      res = m[n.getMonth()] + ' ' + n.getDate() + ' ' + n.getFullYear() + ' ' + w[n.getDay()];
    }
  } else if (hours > 0) {
    res = hours + ' hours ago';
  } else if (minutes > 0) {
    res = minutes + ' minutes ago';
  } else if (seconds > 0) {
    res = seconds + ' seconds ago';
  } else {
    res = 'Justnow'
  }
  return 'Posted ' + res;

}




答案 2 :(得分:0)

2017-05-04T04:26:37.000Z采用已知且可接受的格式。所以你需要做的就是:

var otherDt = new Date("2017-05-04T04:26:37.000Z");
var today = new Date();

if(today.getTime() > otherDt.getTime()){
     // print the time only
 }
 else{
   //print date and time
 }

答案 3 :(得分:0)

这将解决您的问题

 var x= "2017-05-04T04:26:37.000Z"; // your received date string
    var currentDate = new Date();
    var historyDate = new Date(x)
    var historyDateNoTime = historyDate.setHours(0,0,0,0);
    var currentDateNoTime = currentDate.setHours(0,0,0,0);
    if(currentDateNoTime === historyDateNoTime )
    {
      console.log(historyDate.getTime());
    }
    else if(currentDateNoTime > historyDateNoTime )
    {
       console.log(historyDate);

    }   

答案 4 :(得分:0)

您可以使用Date.parse()传递日期字符串并以毫秒为单位获取日期表示。然后比较两个解析日期。



var dt = Date.parse("Thu May 04 2017 10:27:12 GMT+0530 (IST)");
var fromDB = Date.parse("2017-05-04T04:26:37.000Z");


if (dt > fromDB) {
    console.log("dt is greater than date from database");
} else {
    console.log("database date is greater than dt");
}




答案 5 :(得分:0)

使用Date.parse()方法从服务器(sql date)获得的第一个解析日期。 然后创建日期变量,该日期变量将服务于当天开始的时间,并使用dateObj.setHourse(0,0,0,0)设置所需时间(当前时间的开始)。然后从dayBeginning获取毫秒,并将其与从服务器获得的时间进行比较。



<div id="received-time">

</div>
&#13;
Traceback (most recent call last):
  File "classifier-plot.py", line 115, in <module>
    Z = Z.reshape(xx.shape)
ValueError: cannot reshape array of size 260 into shape (150,1750)
&#13;
&#13;
&#13;

答案 6 :(得分:0)

首先取当前日期

var currentDate=new Date();

我们已经有聊天消息的日期,格式为以上类型。为此,我们使用

var date1=new Date(historyDate);

现在我们有相同格式的当前日期和历史日期

然后从每个日期获得年,月和日

var date2=date1.getDate()  + "-" + (date1.getMonth()+1) + "-" + date1.getFullYear();
 var date3=currentDate.getDate()  + "-" + (currentDate.getMonth()+1) + "-" + currentDate.getFullYear();

现在我们得到答案(例子)

  

date2 = 4-5-2017   date3 = 2-5-2017

现在我们可以将date2和date3比作bleow

if(date2==date3){
    //print current time only
}
else{
   //print date along with time
}