JS 获取一段时间内的工作时长小时数
时间: 2024-03-17 10:40:30 浏览: 232
你可以使用 JavaScript 中的 Date 对象和一些简单的数学运算来计算工作时长。
以下是一个简单的示例函数,它接受两个时间戳参数(开始时间和结束时间),并返回它们之间的工作小时数:
```javascript
function getWorkHours(start, end) {
const msPerHour = 1000 * 60 * 60;
const diffMs = end - start;
const diffHours = diffMs / msPerHour;
return diffHours;
}
```
使用示例:
```javascript
const start = new Date('2021-01-01T09:00:00Z').getTime(); // 开始时间戳
const end = new Date('2021-01-01T17:30:00Z').getTime(); // 结束时间戳
const workHours = getWorkHours(start, end);
console.log(workHours); // 8.5
```
这个示例假设开始和结束时间都是 UTC 时间,并且工作时间不跨越多天。如果你需要计算更复杂的工作时间,你可能需要考虑时区、跨天和节假日等因素。
相关问题
JS 获取跨天时间段内的工作时长小时数
要计算跨天时间段内的工作时长,你需要考虑到开始时间和结束时间可能在不同的日期。
以下是一个示例函数,它接受两个参数(开始时间和结束时间),并返回它们之间的工作小时数,可以跨越多天:
```javascript
function getWorkHours(start, end) {
const msPerHour = 1000 * 60 * 60;
const msPerDay = msPerHour * 24;
// 将开始时间和结束时间转换为 UTC 时间
const startUtc = Date.UTC(start.getFullYear(), start.getMonth(), start.getDate(), start.getHours(), start.getMinutes(), start.getSeconds(), start.getMilliseconds());
const endUtc = Date.UTC(end.getFullYear(), end.getMonth(), end.getDate(), end.getHours(), end.getMinutes(), end.getSeconds(), end.getMilliseconds());
// 计算开始时间和结束时间所在的日期
const startDate = new Date(startUtc);
const endDate = new Date(endUtc);
const startDay = startDate.getDate();
const endDay = endDate.getDate();
// 计算跨越的天数
const diffDays = (endUtc - startUtc) / msPerDay;
// 计算每一天的工作小时数
let workHours = 0;
for (let i = 0; i <= diffDays; i++) {
const date = new Date(startUtc + i * msPerDay);
const day = date.getDate();
// 如果是开始日期或结束日期,只计算部分工作时间
let startHour = 0;
let endHour = 24;
if (day === startDay) {
startHour = startDate.getHours() + startDate.getMinutes() / 60;
}
if (day === endDay) {
endHour = endDate.getHours() + endDate.getMinutes() / 60;
}
// 计算工作时间
workHours += endHour - startHour;
}
return workHours;
}
```
使用示例:
```javascript
const start = new Date('2021-01-01T16:30:00Z'); // 开始时间(UTC 时间)
const end = new Date('2021-01-02T09:15:00Z'); // 结束时间(UTC 时间)
const workHours = getWorkHours(start, end);
console.log(workHours); // 8.75
```
这个示例假设工作时间是从每天的 0 点到 24 点,如果你的工作时间不是这个范围,你需要相应地调整代码中的计算。
JS 获取跨天时间段内的工作时长小时数早09点到晚18点,中午12点到13点不算工作时间
可以通过以下步骤来获取跨天时间段内的工作时长小时数(早09点到晚18点,中午12点到13点不算工作时间):
1. 将起始时间和结束时间转化为时间戳,单位为毫秒。
```javascript
let startTime = new Date('2022-01-01 09:30:00').getTime(); // 早上09:30
let endTime = new Date('2022-01-02 18:15:00').getTime(); // 晚上18:15
```
2. 计算跨天的天数。
```javascript
let days = Math.floor((endTime - startTime) / (24 * 60 * 60 * 1000));
```
3. 计算跨天的工作小时数。
```javascript
let workHours = 0;
let startHour = new Date(startTime).getHours(); // 起始时间的小时数
let endHour = new Date(endTime).getHours(); // 结束时间的小时数
// 如果起始时间在 09:00 之前,则将起始时间调整为 09:00
if (startHour < 9) {
startTime = new Date(new Date(startTime).setHours(9, 0, 0, 0)).getTime();
startHour = 9;
}
// 如果结束时间在 18:00 之后,则将结束时间调整为 18:00
if (endHour >= 18) {
endTime = new Date(new Date(endTime).setHours(18, 0, 0, 0)).getTime();
endHour = 18;
}
// 计算工作小时数
for (let i = startHour; i < endHour; i++) {
if (i < 12 || i >= 13) { // 排除中午12点到13点的时间
workHours++;
}
}
// 如果起始时间和结束时间在同一天,并且结束时间在 12:00 到 13:00 之间,则需要减去一个小时
if (new Date(startTime).getDate() === new Date(endTime).getDate() && endHour >= 12 && endHour < 13) {
workHours--;
}
```
4. 计算总的工作小时数。
```javascript
let totalHours = days * 8 + workHours;
```
完整代码:
```javascript
let startTime = new Date('2022-01-01 09:30:00').getTime(); // 早上09:30
let endTime = new Date('2022-01-02 18:15:00').getTime(); // 晚上18:15
let days = Math.floor((endTime - startTime) / (24 * 60 * 60 * 1000));
let workHours = 0;
let startHour = new Date(startTime).getHours(); // 起始时间的小时数
let endHour = new Date(endTime).getHours(); // 结束时间的小时数
// 如果起始时间在 09:00 之前,则将起始时间调整为 09:00
if (startHour < 9) {
startTime = new Date(new Date(startTime).setHours(9, 0, 0, 0)).getTime();
startHour = 9;
}
// 如果结束时间在 18:00 之后,则将结束时间调整为 18:00
if (endHour >= 18) {
endTime = new Date(new Date(endTime).setHours(18, 0, 0, 0)).getTime();
endHour = 18;
}
// 计算工作小时数
for (let i = startHour; i < endHour; i++) {
if (i < 12 || i >= 13) { // 排除中午12点到13点的时间
workHours++;
}
}
// 如果起始时间和结束时间在同一天,并且结束时间在 12:00 到 13:00 之间,则需要减去一个小时
if (new Date(startTime).getDate() === new Date(endTime).getDate() && endHour >= 12 && endHour < 13) {
workHours--;
}
let totalHours = days * 8 + workHours;
console.log(totalHours);
```
输出结果为 `16`,即跨天时间段内的工作时长为 16 小时。
阅读全文