我正在使用当前日期(由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。!!!!
答案 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会将它们视为字符串。
如果由于字符串格式而无效,请尝试将您的月份减去一个。