[英]How can I calculate the difference between two times that are in 24 hour format which are in different dates?
[英]How can I calculate the difference between two times that are in 24 hour format?
在 JavaScript 中,如何計算 24 小時格式的兩個時間之間的差異?
示例:獲取從08:00:00
到23:00:00
經過了多少小時。
下面我從兩個下拉菜單中獲取兩個時間值,並嘗試計算兩個時間之間的小時差。 我得到錯誤的結果...
工作示例: http://jsfiddle.net/VnwF7/1/
腳本:
$(document).ready(function() {
function calculateTime() {
//get values
var valuestart = $("select[name='timestart']").val();
var valuestop = $("select[name='timestop']").val();
//create date format
var timeStart = new Date("01/01/2007 " + valuestart);
var timeEnd = new Date("01/01/2007 " + valuestop);
var difference = timeEnd - timeStart;
var diff_result = new Date(difference);
var hourDiff = diff_result.getHours();
$("p").html("<b>Total Hours:</b> " + hourDiff )
}
$("select").change(calculateTime);
calculateTime();
});
HTML:
<select name="timestart">
<option value="00:00:00">12:00 am</option>
<option value="01:00:00">1:00 am</option>
<option value="02:00:00">2:00 am</option>
<option value="03:00:00">3:00 am</option>
<option value="04:00:00">4:00 am</option>
<option value="05:00:00">5:00 am</option>
<option value="06:00:00">6:00 am</option>
<option value="07:00:00">7:00 am</option>
<option value="08:00:00">8:00 am</option>
<option value="09:00:00">9:00 am</option>
<option value="10:00:00">10:00 am</option>
<option value="11:00:00">11:00 am</option>
<option value="12:00:00">12:00 pm</option>
<option value="13:00:00">1:00 pm</option>
<option value="14:00:00">2:00 pm</option>
<option value="15:00:00">3:00 pm</option>
<option value="16:00:00">4:00 pm</option>
<option value="17:00:00">5:00 pm</option>
<option value="18:00:00">6:00 pm</option>
<option value="19:00:00">7:00 pm</option>
<option value="20:00:00">8:00 pm</option>
<option value="21:00:00">9:00 pm</option>
<option value="22:00:00">10:00 pm</option>
<option value="23:00:00">11:00 pm</option>
</select>
<select name="timestop">
<option value="00:00:00">12:00 am</option>
<option value="01:00:00">1:00 am</option>
<option value="02:00:00">2:00 am</option>
<option value="03:00:00">3:00 am</option>
<option value="04:00:00">4:00 am</option>
<option value="05:00:00">5:00 am</option>
<option value="06:00:00">6:00 am</option>
<option value="07:00:00">7:00 am</option>
<option value="08:00:00">8:00 am</option>
<option value="09:00:00">9:00 am</option>
<option value="10:00:00">10:00 am</option>
<option value="11:00:00">11:00 am</option>
<option value="12:00:00">12:00 pm</option>
<option value="13:00:00">1:00 pm</option>
<option value="14:00:00">2:00 pm</option>
<option value="15:00:00">3:00 pm</option>
<option value="16:00:00">4:00 pm</option>
<option value="17:00:00">5:00 pm</option>
<option value="18:00:00">6:00 pm</option>
<option value="19:00:00">7:00 pm</option>
<option value="20:00:00">8:00 pm</option>
<option value="21:00:00">9:00 pm</option>
<option value="22:00:00">10:00 pm</option>
<option value="23:00:00">11:00 pm</option>
</select>
<p></p>
您可以通過這種方式立即減去時間
var valuestart = $("select[name='timestart']").val();
var valuestop = $("select[name='timestop']").val();
//create date format
var timeStart = new Date("01/01/2007 " + valuestart).getHours();
var timeEnd = new Date("01/01/2007 " + valuestop).getHours();
var hourDiff = timeEnd - timeStart;
這是工作小提琴http://jsfiddle.net/VnwF7/4/
更新 - 計算我們是否包括第二天。 只需添加以下 if 塊
if (hourDiff < 0) {
hourDiff = 24 + hourDiff;
}
試試這個
var time_start = new Date();
var time_end = new Date();
var value_start = "06:00:00".split(':');
var value_end = "23:00:00".split(':');
time_start.setHours(value_start[0], value_start[1], value_start[2], 0)
time_end.setHours(value_end[0], value_end[1], value_end[2], 0)
time_end - time_start // millisecond
我更改了您的代碼以僅使用差異而無需創建另一個日期對象:
$(document).ready(function() {
function calculateTime() {
//get values
var valuestart = $("select[name='timestart']").val();
var valuestop = $("select[name='timestop']").val();
//create date format
var timeStart = new Date("01/01/2007 " + valuestart);
var timeEnd = new Date("01/01/2007 " + valuestop);
var difference = timeEnd - timeStart;
difference = difference / 60 / 60 / 1000;
$("p").html("<b>Hour Difference:</b> " + difference)
}
$("select").change(calculateTime);
calculateTime();
});
它不是 Jquery,而是 JavaScript 中與時間和日期相關的所有內容......
這可能有幫助:datejs http://code.google.com/p/datejs/
這是文檔中的一些日期和時間計算
Date.today().set({ day: 15 }) // Sets the day to the 15th of the current month and year. Other object values include year|month|day|hour|minute|second.
Date.today().set({ year: 2007, month: 1, day: 20 })
Date.today().add({ days: 2 }) // Adds 2 days to the Date. Other object values include year|month|day|hour|minute|second.
Date.today().add({ years: -1, months: 6, hours: 3 })
Date.today().addYears(1) // Add 1 year.
Date.today().addMonths(-2) // Subtract 2 months.
Date.today().addWeeks(1) // Add 1 week
Date.today().addHours(6) // Add 6 hours.
Date.today().addMinutes(-30) // Subtract 30 minutes
Date.today().addSeconds(15) // Add 15 seconds.
Date.today().addMilliseconds(200) // Add 200 milliseconds.
Date.today().moveToFirstDayOfMonth() // Returns the first day of the current month.
Date.today().moveToLastDayOfMonth() // Returns the last day of the current month.
new Date().clearTime() // Sets the time to 00:00 (start of the day).
Date.today().setTimeToNow() // Resets the time to the current time (now). The functional opposite of .clearTime()
編輯:因為這是一個相當古老的答案,我最近也確實使用 moment.js 進行與日期相關的操作,這也非常有用。 http://momentjs.com/ https://github.com/moment/moment/
對於這種特定情況,您不需要將它們轉換為日期。 就這樣做
$(document).ready(function() {
function calculateTime() {
var hourDiff =
parseInt($("select[name='timestart']").val().split(':')[0],10) -
parseInt($("select[name='timestop']").val().split(':')[0],10);
$("p").html("<b>Hour Difference:</b> " + hourDiff )
}
$("select").change(calculateTime);
calculateTime();
});
這段代碼對我有用,代碼是通過考慮 AM PM 差異編寫的。 只需根據您喜歡的格式編寫日期並嘗試使用此代碼
function getTimeDifference(startTime, endTime) { const difference = endTime - startTime; const differenceInMinutes = difference / 1000 / 60; let hours = Math.floor(differenceInMinutes / 60); if (hours < 0) { hours = 24 + hours; } let minutes = Math.floor(differenceInMinutes % 60); if (minutes < 0) { minutes = 60 + minutes; } const hoursAndMinutes = hours + ":" + (minutes < 10? '0': '') + minutes; return hoursAndMinutes; } const start = new Date(0,0,0,23,15); const end = new Date(0,0,0,1,30); const difference = getTimeDifference(start, end); console.log(difference);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.