检查Javascript中的时差

你将如何检查两个文本框在Javascript中的时间差异?

凑合。 减去JavaScript Date对象以获得它们的区别:

 // use a constant date (eg 2000-01-01) and the desired time to initialize two dates var date1 = new Date(2000, 0, 1, 9, 0); // 9:00 AM var date2 = new Date(2000, 0, 1, 17, 0); // 5:00 PM // the following is to handle cases where the times are on the opposite side of // midnight eg when you want to get the difference between 9:00 PM and 5:00 AM if (date2 < date1) { date2.setDate(date2.getDate() + 1); } var diff = date2 - date1; // 28800000 milliseconds (8 hours) 

然后,您可以将毫秒转换为小时,分钟和秒钟,如下所示:

 var msec = diff; var hh = Math.floor(msec / 1000 / 60 / 60); msec -= hh * 1000 * 60 * 60; var mm = Math.floor(msec / 1000 / 60); msec -= mm * 1000 * 60; var ss = Math.floor(msec / 1000); msec -= ss * 1000; // diff = 28800000 => hh = 8, mm = 0, ss = 0, msec = 0 

您可以将时间转换为24小时格式,如下所示:

 function parseTime(s) { var part = s.match(/(\d+):(\d+)(?: )?(am|pm)?/i); var hh = parseInt(part[1], 10); var mm = parseInt(part[2], 10); var ap = part[3] ? part[3].toUpperCase() : null; if (ap === "AM") { if (hh == 12) { hh = 0; } } if (ap === "PM") { if (hh != 12) { hh += 12; } } return { hh: hh, mm: mm }; } parseTime("12:00 AM"); // {hh: 0, mm: 0} parseTime("12:00 PM"); // {hh: 12, mm: 0} parseTime("01:00 PM"); // {hh: 13, mm: 0} parseTime("23:00"); // {hh: 23, mm: 0} 

这个函数返回一个string,与date时间string和当前date时间不同。

 function get_time_diff( datetime ) { var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456"; var datetime = new Date( datetime ).getTime(); var now = new Date().getTime(); if( isNaN(datetime) ) { return ""; } console.log( datetime + " " + now); if (datetime < now) { var milisec_diff = now - datetime; }else{ var milisec_diff = datetime - now; } var days = Math.floor(milisec_diff / 1000 / 60 / (60 * 24)); var date_diff = new Date( milisec_diff ); return days + " Days "+ date_diff.getHours() + " Hours " + date_diff.getMinutes() + " Minutes " + date_diff.getSeconds() + " Seconds"; } 

在Google Chrome consoletesting(按F12)

 get_time_diff() 1388534523123 1375877555722 "146 Days 12 Hours 49 Minutes 27 Seconds" 

这是我的演绎….

 function get_time_difference(earlierDate, laterDate) { var oDiff = new Object(); // Calculate Differences // ------------------------------------------------------------------- // var nTotalDiff = laterDate.getTime() - earlierDate.getTime(); oDiff.days = Math.floor(nTotalDiff / 1000 / 60 / 60 / 24); nTotalDiff -= oDiff.days * 1000 * 60 * 60 * 24; oDiff.hours = Math.floor(nTotalDiff / 1000 / 60 / 60); nTotalDiff -= oDiff.hours * 1000 * 60 * 60; oDiff.minutes = Math.floor(nTotalDiff / 1000 / 60); nTotalDiff -= oDiff.minutes * 1000 * 60; oDiff.seconds = Math.floor(nTotalDiff / 1000); // ------------------------------------------------------------------- // // Format Duration // ------------------------------------------------------------------- // // Format Hours var hourtext = '00'; if (oDiff.days > 0){ hourtext = String(oDiff.days);} if (hourtext.length == 1){hourtext = '0' + hourtext}; // Format Minutes var mintext = '00'; if (oDiff.minutes > 0){ mintext = String(oDiff.minutes);} if (mintext.length == 1) { mintext = '0' + mintext }; // Format Seconds var sectext = '00'; if (oDiff.seconds > 0) { sectext = String(oDiff.seconds); } if (sectext.length == 1) { sectext = '0' + sectext }; // Set Duration var sDuration = hourtext + ':' + mintext + ':' + sectext; oDiff.duration = sDuration; // ------------------------------------------------------------------- // return oDiff; } 

这是为我工作的解决scheme:

 var date1 = new Date("08/05/2015 23:41:20"); var date2 = new Date("08/06/2015 02:56:32"); var diff = date2.getTime() - date1.getTime(); var msec = diff; var hh = Math.floor(msec / 1000 / 60 / 60); msec -= hh * 1000 * 60 * 60; var mm = Math.floor(msec / 1000 / 60); msec -= mm * 1000 * 60; var ss = Math.floor(msec / 1000); msec -= ss * 1000; alert(hh + ":" + mm + ":" + ss); 

一个好的解决scheme是可用的

http://blogs.digitss.com/javascript/calculate-datetime-difference-simple-javascript-code-snippet/

给出你想要的不同格式的输出

天:小时:分钟:秒。

下面显示了该代码的稍微修改版本

  var vdaysdiff; // difference of the dates var vhourDiff; var vmindiff; var vsecdiff; vdaysdiff = Math.floor(diff/1000/60/60/24); // in days diff -= vdaysdiff*1000*60*60*24; vhourDiff = Math.floor(diff/1000/60/60); // in hours diff -= vhourDiff*1000*60*60; vmindiff = Math.floor(diff/1000/60); // in minutes diff -= vmindiff*1000*60; vsecdiff= Math.floor(diff/1000); // in seconds //Text formatting var hourtext = '00'; if (hourDiff > 0){ hourtext = String(hourDiff);} if (hourtext.length == 1){hourtext = '0' + hourtext}; var mintext = '00'; if (mindiff > 0){ mintext = String(mindiff);} if (mintext.length == 1){mintext = '0' + mintext}; //shows output as HH:MM ( i needed shorter duration) duration.value= hourtext + ':' + mintext; 

当我尝试相同的时间戳之间的差异给了0天5小时30分钟

所以得到它,我已经减去了5小时30分钟

 function get_time_diff( datetime ) { var datetime = typeof datetime !== 'undefined' ? datetime : "2014-01-01 01:02:03.123456"; var datetime = new Date(datetime).getTime(); var now = new Date().getTime(); if( isNaN(datetime) ) { return ""; } console.log( datetime + " " + now); if (datetime < now) { var milisec_diff = now - datetime; }else{ var milisec_diff = datetime - now; } var days = Math.floor(milisec_diff / 1000 / 60 / (60 * 24)); var date_diff = new Date( milisec_diff ); return days + "d "+ (date_diff.getHours() - 5) + "h " + (date_diff.getMinutes() - 30) + "m"; } 

这是dmd733的答案的补充。 我修复了持续时间的错误(嗯,我希望我做了,没有能够testing每个案件)。

我也快速添加了一个string属性的结果,持有一般的时间过去了(抱歉,糟糕的嵌套ifs !!)。 例如,如果用于UI和指示什么时候更新(如RSS提要)。 种类不合适,但很好有:

 function getTimeDiffAndPrettyText(oDatePublished) { var oResult = {}; var oToday = new Date(); var nDiff = oToday.getTime() - oDatePublished.getTime(); // Get diff in days oResult.days = Math.floor(nDiff / 1000 / 60 / 60 / 24); nDiff -= oResult.days * 1000 * 60 * 60 * 24; // Get diff in hours oResult.hours = Math.floor(nDiff / 1000 / 60 / 60); nDiff -= oResult.hours * 1000 * 60 * 60; // Get diff in minutes oResult.minutes = Math.floor(nDiff / 1000 / 60); nDiff -= oResult.minutes * 1000 * 60; // Get diff in seconds oResult.seconds = Math.floor(nDiff / 1000); // Render the diffs into friendly duration string // Days var sDays = '00'; if (oResult.days > 0) { sDays = String(oResult.days); } if (sDays.length === 1) { sDays = '0' + sDays; } // Format Hours var sHour = '00'; if (oResult.hours > 0) { sHour = String(oResult.hours); } if (sHour.length === 1) { sHour = '0' + sHour; } // Format Minutes var sMins = '00'; if (oResult.minutes > 0) { sMins = String(oResult.minutes); } if (sMins.length === 1) { sMins = '0' + sMins; } // Format Seconds var sSecs = '00'; if (oResult.seconds > 0) { sSecs = String(oResult.seconds); } if (sSecs.length === 1) { sSecs = '0' + sSecs; } // Set Duration var sDuration = sDays + ':' + sHour + ':' + sMins + ':' + sSecs; oResult.duration = sDuration; // Set friendly text for printing if(oResult.days === 0) { if(oResult.hours === 0) { if(oResult.minutes === 0) { var sSecHolder = oResult.seconds > 1 ? 'Seconds' : 'Second'; oResult.friendlyNiceText = oResult.seconds + ' ' + sSecHolder + ' ago'; } else { var sMinutesHolder = oResult.minutes > 1 ? 'Minutes' : 'Minute'; oResult.friendlyNiceText = oResult.minutes + ' ' + sMinutesHolder + ' ago'; } } else { var sHourHolder = oResult.hours > 1 ? 'Hours' : 'Hour'; oResult.friendlyNiceText = oResult.hours + ' ' + sHourHolder + ' ago'; } } else { var sDayHolder = oResult.days > 1 ? 'Days' : 'Day'; oResult.friendlyNiceText = oResult.days + ' ' + sDayHolder + ' ago'; } return oResult; } 

以毫秒为单位的时间差

 firstDate.getTime() - secondDate.getTime() 

我喜欢通过Epoch做。

 var now = new Date(); var future = new Date(now.setMinutes(15)); var futureEpoch = moment(future).unix(); var nowEpoch = moment(now).unix(); var differenceInEpoch = nowEpoch - scheduledEpoch ; console.log("futureEpoch : " + futureEpoch); console.log("nowEpoch : " + nowEpoch); console.log("differenceInEpoch : " + differenceInEpoch); var diffTime = new Date(0); // The 0 there is the key, which sets the date to the epoch diffTime.setUTCSeconds(differenceInEpoch); console.log("new diffTime : " + diffTime); 

在我的情况下,我将存储在铬存储的时间以毫秒为单位,并尝试在数小时后发现差异。

 function timeDiffInHours(milliseconds){ time_diff = (new Date).getTime() - milliseconds return parseInt((time_diff/(1000*60*60)) % 24) } // This is again sending current time and diff would be 0. timeDiffInHours((new Date).getTime()); 

我为定时器计数器做了一些增强

 //example return : 01:23:02:02 // : 1 Day 01:23:02:02 // : 2 Days 01:23:02:02 function get_timeDifference(strtdatetime) { var datetime = new Date(strtdatetime).getTime(); var now = new Date().getTime(); if (isNaN(datetime)) { return ""; } //console.log(datetime + " " + now); if (datetime < now) { var milisec_diff = now - datetime; } else { var milisec_diff = datetime - now; } var days = Math.floor(milisec_diff / 1000 / 60 / (60 * 24)); var date_diff = new Date(milisec_diff); var msec = milisec_diff; var hh = Math.floor(msec / 1000 / 60 / 60); msec -= hh * 1000 * 60 * 60; var mm = Math.floor(msec / 1000 / 60); msec -= mm * 1000 * 60; var ss = Math.floor(msec / 1000); msec -= ss * 1000 var daylabel = ""; if (days > 0) { var grammar = " "; if (days > 1) grammar = "s " var hrreset = days * 24; hh = hh - hrreset; daylabel = days + " Day" + grammar ; } // Format Hours var hourtext = '00'; hourtext = String(hh); if (hourtext.length == 1) { hourtext = '0' + hourtext }; // Format Minutes var mintext = '00'; mintext = String(mm); if (mintext.length == 1) { mintext = '0' + mintext }; // Format Seconds var sectext = '00'; sectext = String(ss); if (sectext.length == 1) { sectext = '0' + sectext }; var msectext = '00'; msectext = String(msec); msectext = msectext.substring(0, 1); if (msectext.length == 1) { msectext = '0' + msectext }; return daylabel + hourtext + ":" + mintext + ":" + sectext + ":" + msectext; } 

我只会使用getTime(); 例如Date.now()以毫秒为单位返回差异:

  //specified date: var oneDate = new Date("November 02, 2017 06:00:00"); //number of milliseconds since midnight Jan 1 1970 till specified date var oneDateMiliseconds = oneDate.getTime(); ////number of milliseconds since midnight Jan 1 1970 till now var currentMiliseconds = Date.now(); //return time difference in miliseconds alert(currentMiliseconds-oneDateMiliseconds); 

在表单提交后获取input值

 $start_time = $_POST('start_time'); $end_time =$_POST('end_time'); $start = $start_time; $end = $end_time; $datetime1 = new DateTime($end); $datetime2 = new DateTime($start); //echo $datetime1->format('H:i:s'); $interval = $datetime1->diff($datetime2); $elapsed = $interval->format('%h:%i'); $time = explode(":",$elapsed); $hours = $time[0]; $minutes = $time[1]; $tminutes = $minutes + ($hours*60);