我试图比较JavaScript中的两个DateTime对象,它给了我一个错误的答案

时间:2018-01-26 22:12:28

标签: javascript

我正在使用当前日期(由Date()函数生成记录的日期时间对象),结果不符合预期。

var  apptTime = "2018.01.26.08.30.10.00";
var checkinTime = "2018.01.26.09.45.10.00";

var yappt = apptTime.substring(0,4);
var mappt = apptTime.substring(5,7); 
var dappt = apptTime.substring(8,10);
var hrappt = apptTime.substring(11,13);
var mmappt = apptTime.substring(14,16);
var ssappt = apptTime.substring(17,19);
var msappt = apptTime.substring(20,22);

var ycht = checkinTime.substring(0,4);
var mcht = checkinTime.substring(5,7);
var dcht = checkinTime.substring(8,10);
var hrcht = checkinTime.substring(11,13);
var mmcht = checkinTime.substring(14,16);
var sscht = checkinTime.substring(17,19);
var mscht = checkinTime.substring(20,22);

var newapptTime = new Date(yappt,mappt,dappt,hrappt,mmappt,ssappt,msappt);
var newcheckinTime = new Date(ycht, mcht, dcht, hrcht, mmcht, sscht, mscht);
var currTime =  new Date();

alert(currTime.getTime() > newcheckinTime.getTime());

答案为假,而当前时间是下午4:10。!!!!

4 个答案:

答案 0 :(得分:0)

您的newcheckinTime日期变量未正确创建。

在创建var newcheckinTime = new Date(year, month, ...)时,月份为零,1月份应为0.并且您的字符串提取月份为' 1'基于

尝试:

var mcht = checkinTime.substring(5,7); // unchanged existing line.
mcht = mcht -1;// new line to adjust the month.

再次:

var mappt = apptTime.substring(5,7); // existing
mappt = mappt -1;// new line 

编辑:(已添加完整代码)



var  apptTime = "2018.01.26.08.30.10.00";
var checkinTime = "2018.01.26.09.45.10.00";

var yappt = apptTime.substring(0,4);
var mappt = apptTime.substring(5,7); 
    mappt = mappt -1;                // new line to adjust the month.
var dappt = apptTime.substring(8,10);
var hrappt = apptTime.substring(11,13);
var mmappt = apptTime.substring(14,16);
var ssappt = apptTime.substring(17,19);
var msappt = apptTime.substring(20,22);

var ycht = checkinTime.substring(0,4);
var mcht = checkinTime.substring(5,7);
    mcht = mcht -1;                 // new line to adjust the month.
var dcht = checkinTime.substring(8,10);
var hrcht = checkinTime.substring(11,13);
var mmcht = checkinTime.substring(14,16);
var sscht = checkinTime.substring(17,19);
var mscht = checkinTime.substring(20,22);

var newapptTime = new Date(yappt,mappt,dappt,hrappt,mmappt,ssappt,msappt);
var newcheckinTime = new Date(ycht, mcht, dcht, hrcht, mmcht, sscht, mscht);
var currTime =  new Date();

console.log("currTime: ", currTime);
console.log("newcheckinTime: ", newcheckinTime);
console.log("Is currTime > newcheckinTime : ", currTime.getTime() > newcheckinTime.getTime());




但是@ Sammy的答案看起来很简单。 :)

快乐的编码!加里。

答案 1 :(得分:0)

我认为你对函数geTime返回的内容感到有些困惑。

Date.prototype.getTime()

  

getTime()方法根据通用时间返回与指定日期的时间对应的数值。

     

getTime()始终使用UTC进行时间表示。例如,一个时区中的客户端浏览器getTime()将与任何其他时区的客户端浏览器相同。

     

您可以使用此方法帮助为另一个Date对象指定日期和时间。此方法在功能上等同于valueOf()方法。

来自developer.mozilla.org的示例:

var moonLanding = new Date('July 20, 69 00:20:18 GMT+00:00');

// milliseconds since Jan 1, 1970, 00:00:00.000 GMT
console.log(moonLanding.getTime());
// expected output: -14254782000

因此,getTime函数返回1970年1月1日午夜到指定日期之间的毫秒数。

您要完成的是比较DateTime,在您的情况下hours:minutes

以下代码段将小时数转换为分钟数,并将每个Date对象的分钟数相加。

var  apptTime = "2018.01.26.08.30.10.00";
var checkinTime = "2018.01.26.09.45.10.00";

var yappt = apptTime.substring(0,4);
var mappt = apptTime.substring(5,7); 
var dappt = apptTime.substring(8,10);
var hrappt = apptTime.substring(11,13);
var mmappt = apptTime.substring(14,16);
var ssappt = apptTime.substring(17,19);
var msappt = apptTime.substring(20,22);

var ycht = checkinTime.substring(0,4);
var mcht = checkinTime.substring(5,7);
var dcht = checkinTime.substring(8,10);
var hrcht = checkinTime.substring(11,13);
var mmcht = checkinTime.substring(14,16);
var sscht = checkinTime.substring(17,19);
var mscht = checkinTime.substring(20,22);

var newapptTime = new Date(yappt,mappt,dappt,hrappt,mmappt,ssappt,msappt);
var newcheckinTime = new Date(ycht, mcht, dcht, hrcht, mmcht, sscht, mscht);
var currTime =  new Date();

console.log(newcheckinTime);
console.log(currTime);

console.log((currTime.getHours() * 60 + currTime.getMinutes()) > (newcheckinTime.getHours() * 60 + newcheckinTime.getMinutes()));

答案 2 :(得分:0)

谢谢大家,我解决了这个问题,自从几个月从JS开始转换以来,我不得不将月份减去-1。

答案 3 :(得分:-2)

我想您可以将日期字符串提供给Date对象,然后执行我相信它将起作用的比较:

var d1 = new Date('2018.01.26.08.30.10.00');
var d2 = new Date('2018.01.26.09.45.10.00');

var same = d1.getTime() === d2.getTime();
var notSame = d1.getTime() !== d2.getTime();

P.S。尝试将它们放在警报内()。因为有时JavaScript会将它们视为字符串。

如果由于字符串格式而无效,请尝试将您的月份减去一个。