jquery 如何计算24小时格式的两个时间之间的差值?

798qvoo8  于 2023-02-03  发布在  jQuery
关注(0)|答案(6)|浏览(136)

在JavaScript中,如何计算两个24小时格式的时间之间的差?
示例:获取从08:00:0023: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();
});

超文本标记语言:

<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>
ccgok5k5

ccgok5k51#

你可以用这种方法减去小时数

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/
UPDATE -计算是否包含第二天。只需添加以下if块

if (hourDiff < 0) {
    hourDiff = 24 + hourDiff;
 }

http://jsfiddle.net/gfvhqat9/

eufgjt7s

eufgjt7s2#

试试这个方法

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
niwlg2el

niwlg2el3#

我修改了您的代码,以便只使用差异,而不必创建另一个date对象:

$(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();
});​
yyyllmsg

yyyllmsg4#

它不是Jquery,而是JavaScript中与时间和日期相关的所有内容...
这可能有助于:日期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进行与日期相关的操作,这也非常有用。

pbpqsu0x

pbpqsu0x5#

你不需要把它们转换成这个特定情况下的日期。

$(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();
});

Working fiddle

mzsu5hc0

mzsu5hc06#

  • 这段代码对我很有效,代码是考虑到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);

相关问题