fix(工时): 按中国工作日历统计正常耗时

This commit is contained in:
Script Generator
2026-06-29 15:04:32 +08:00
parent 47f41c3e40
commit aa6970876a
5 changed files with 51 additions and 14 deletions

View File

@@ -1,14 +1,26 @@
import test from 'node:test';
import assert from 'node:assert/strict';
import { calcActualElapsedHours, formatActualDuration } from './work-hours';
import { calcActualElapsedHours, calcWorkHours, formatActualDuration } from './work-hours';
import { calcDuration } from './overtime';
test('calcActualElapsedHours uses real elapsed time with a half-hour minimum', () => {
test('calcWorkHours skips official holidays and counts makeup workdays', () => {
assert.equal(calcWorkHours('2026-10-01T09:00:00', '2026-10-01T18:00:00'), 0);
assert.equal(calcWorkHours('2026-10-10T09:00:00', '2026-10-10T18:00:00'), 8);
});
test('calcActualElapsedHours uses work calendar time with a half-hour minimum', () => {
assert.equal(calcActualElapsedHours('2026-06-22T09:00:00', '2026-06-22T09:10:00'), 0.5);
assert.equal(calcActualElapsedHours('2026-06-22T09:00:00', '2026-06-22T10:15:00'), 1.5);
assert.equal(calcActualElapsedHours('2026-10-01T09:00:00', '2026-10-01T18:00:00'), 0);
assert.equal(calcActualElapsedHours('2026-10-10T09:00:00', '2026-10-10T10:00:00'), 1);
assert.equal(calcActualElapsedHours('2026-06-22T10:00:00', '2026-06-22T09:00:00'), 0);
});
test('overtime duration still counts holiday time directly', () => {
assert.equal(calcDuration('2026-10-01T09:00:00', '2026-10-01T18:00:00'), 9);
});
test('formatActualDuration converts hours to natural days', () => {
assert.equal(formatActualDuration(60.5), '60.5h2.5天)');
assert.equal(formatActualDuration(0.5), '0.5h0.02天)');