gpt4 book ai didi

javascript - 如何计算点后面两位小数的小时差

转载 作者:行者123 更新时间:2023-12-04 07:14:25 25 4
gpt4 key购买 nike

这是我的表格:

<input type="text" class="date" name="date[]">                      
<input type="text" class="starttime" name="starttime[]">

<input type="text" class="endtime" name="endtime[]">
<input type="text" class="hours" name="hours[]">
计算 starttime之间的小时数和 endtime我用这个js:
$('.endtime').on('change', function() {      
//get values
var date = $('.date').val();
var starttime = $('.starttime').val();
var endtime = $('.endtime').val();

//create date format
var timeStart = new Date("01-01-2021 " + starttime).getHours();
var timeEnd = new Date("01-01-2021 " + endtime).getHours();

//console.log(timeStart, timeEnd);
var hourDiff = timeEnd - timeStart;
if (hourDiff < 0) {
hourDiff = 24 + hourDiff;
}

$(".hours").val(hourDiff); // output in input field
});
假设开始时间是 12:00结束时间是 15:45 ,输出应该是 3.75但它显示给我 3 .
如何获得点后两位小数的小时数?

最佳答案

不只使用计算中的小时数。您至少也需要几分钟,但您也可以使用 Date 的完整分辨率。 (毫秒):

// Get the milliseconds-since-The-Epoch values for the times on 01/01/2021
const timeStart = Date.parse("2021-01-01T" + starttime);
const timeEnd = Date.parse("2021-01-01T" + endtime);

// Calculate the difference, divide to get a fractional hours value
let hourDiff = (timeEnd - timeStart) / 1000 / 60 / 60;
if (hourDiff < 0) {
hourDiff += 24;
}

// Format it to two decimals for display
$(".hours").val(hourDiff.toFixed(2));
( Date.parse 的解析方式与 new Date 相同,但返回的是毫秒数,而不是日期对象。)
请注意,我稍微更改了字符串格式( Year-Month-DayT 而不是空格),因此字符串位于 the standard format .
现场示例:

function example(starttime, endtime) {
// Get the milliseconds-since-The-Epoch values for the times on 01/01/2021
const timeStart = Date.parse("2021-01-01T" + starttime);
const timeEnd = Date.parse("2021-01-01T" + endtime);

// Calculate the difference, divide to get a fractional hours value
let hourDiff = (timeEnd - timeStart) / 1000 / 60 / 60;
if (hourDiff < 0) {
hourDiff += 24;
}

// Format it to two decimals for display
console.log(starttime, "to", endtime, "=>", hourDiff.toFixed(2));
}

example("12:00", "15:45");
example("12:00", "03:45");

或者,直接转换时间:
function toHours(time) {
const parts = time.split(":");
const hours = Number(parts[0]) || 0;
const minutes = Number(parts[1]) || 0;
const seconds = Number(parts[2]) || 0;
return hours + (minutes / 60) + (seconds / 3600);
}
然后
// Format it to two decimals for display
let hourDiff = toHours(endtime) - toHours(starttime);
if (hourDiff < 0) {
hourDiff += 24;
}
$(".hours").val(hourDiff.toFixed(2));
现场示例:

function toHours(time) {
const parts = time.split(":");
const hours = Number(parts[0]) || 0;
const minutes = Number(parts[1]) || 0;
const seconds = Number(parts[2]) || 0;
return hours + (minutes / 60) + (seconds / 3600);
}

function example(starttime, endtime) {
let hourDiff = toHours(endtime) - toHours(starttime);
if (hourDiff < 0) {
hourDiff += 24;
}

console.log(starttime, "to", endtime, "=>", hourDiff.toFixed(2));
}

example("12:00", "15:45");
example("12:00", "03:45");
example("12:00", "3:45");

我想如果是我,我会这样做而不是使用 Date目的。它更直接。

你只需要那些 if (hourDiff < 0)检查结束时间是否真的有可能在开始时间之前,但是您在原件中有它们,所以我想我应该将它们留在那里。如果结束时间不能早于开始时间,您可以安全地删除它们。

关于javascript - 如何计算点后面两位小数的小时差,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68871944/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com