JS 获取跨天时间段内的工作时长小时数早09点到晚18点,中午12点到13点不算工作时间
时间: 2023-07-12 14:39:38 浏览: 63
可以通过以下步骤来获取跨天时间段内的工作时长小时数(早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 小时。
阅读全文