使用方法
工时表生成器把零散的打卡记录汇总成一张工资单,只要三步:
- 「时薪」填你的 hourly rate,演示值 50 元/小时;按 0 算则只给总工时不给工资。
- 「班次明细」每行写一组
开始 结束 休息分钟。演示三行是 09:00 12:00 30、13:30 18:00 0、09:00 12:30 45。 - 按「统计工时与工资」,或在大文本框里按 Ctrl/Cmd + Enter。四张卡片给总工时、应发工资、有效天数、日均;下方对照表按 12 行起、加载更多补到 20 行。
- 想还原演示按「载入示例」。
工时表生成器能解决什么
它解决「打卡记录散、月底不会加」的痛点,适合三类人:
- 兼职与自由职业:每天工时不一,手工加容易漏行。演示三行分别 2.5、4.5、2.75 小时,合计 9.75 小时,时薪 50 时工资 487.5 元,比心算稳。
- 小时工对账:休息分钟单列,避免把午休算进工时。演示第一行休 30 分钟,净工时从 3 小时降到 2.5 小时,差的就是这半小时。
- 排班试算:先把一周班次都粘进来,看总工时是否踩到 40 小时红线;对照表里 40 小时对应时薪 50 的工资是 2000 元,可作为周薪参考线。
本页不做的事:不算个税与社保(到手工资请另算);不处理加班倍率(如 1.5 倍);不区分不同日期的不同时薪。这些都需要在结果上自行叠加,或换成专门的薪资工具。
原理和变量
① 用了哪个具体函数:时间解析用 String.split(':') 取时与分,转分钟用 h * 60 + m;净工时 = (结束分 − 开始分 − 休息分) / 60;总工资 = 总净分钟 ÷ 60 × 时薪。全部用整数分钟做累加,最后一次性转小时,避免每行小数带来的浮点累积误差。
② 关键参数为什么这样取:先统一成「分钟」再相减,是因为 09:00 到 12:30 跨半点,直接减小时会丢 30 分钟;分钟口径能把 0.5 小时精确表达。休息分钟单独减,而不是并入结束时间,是因为休息通常发生在中间,净工时才是计薪口径。
③ 遵循哪个标准:工时与工资口径参照《劳动法》「计薪按实际出勤小时」的通行做法;时间用 24 小时制解析。浮点用 IEEE 754 双精度,最终结果保留两位小数。
④ 输入怎么变成输出:三行分别为 (180−0−30)=150 分、(270−0−0)=270 分、(210−0−45)=165 分,合计 585 分 = 9.75 小时;工资 = 585 ÷ 60 × 50 = 487.5 元;有效 3 天,日均 9.75 ÷ 3 = 3.25 小时。
⑤ 边界与阈值:时薪 0~10000;每行必须能解析出开始与结束两个时间,格式错会指出具体行号;休息分钟为负会提示;跨天(结束 ≤ 开始)自动 +1440 分,例如 22:00 到 06:00 算 8 小时。
⑥ 常见误用的正确解释:把休息分钟当「结束时间」填是最高频错误,会导致净工时变成负数;另一个是把 09:00-12:00 当成 3 个整点即 3 小时,漏掉「12:00 是第 3 小时结束点而非第 3 小时」——正确净工时 3 小时(演示无休息),但若写了 30 分钟休息就是 2.5 小时。
完整示例(数值仅作演示)
时薪 50 元;班次三行 09:00 12:00 30 / 13:30 18:00 0 / 09:00 12:30 45。
- 第 1 行:180 − 0 − 30 = 150 分 = 2.5 小时。
- 第 2 行:270 − 0 − 0 = 270 分 = 4.5 小时。
- 第 3 行:210 − 0 − 45 = 165 分 = 2.75 小时。
- 合计:585 分 = 9.75 小时;工资 9.75 × 50 = 487.5 元;日均 3.25 小时。
四组数字与页面默认卡片、下方对照表口径一致。
输入范围与对照表
工时表生成器的对照表固定时薪 50 元,列出不同总工时对应的应发工资,方便你反推排班:
| 总工时(小时) | 应发工资(元) | 总工时(小时) | 应发工资(元) |
|---|---|---|---|
| 1 | 50 | 7 | 350 |
| 2 | 100 | 8 | 400 |
| 3 | 150 | 9 | 450 |
| 4 | 200 | 10 | 500 |
| 5 | 250 | 9.75(演示值) | 487.5 |
| 6 | 300 | 12 | 600 |
| 13 | 650 | 17 | 850 |
| 14 | 700 | 18 | 900 |
| 15 | 750 | 19 | 950 |
| 16 | 800 | 20 | 1000 |
对照表每 1 小时对应 50 元,和时薪线性相关;如果你改了时薪,请用「班次明细」实际跑一遍,本表不随输入框联动。
结果边界和舍入
舍入位置:总工时与工资都保留两位小数(Number(x.toFixed(2)))。因为先用整数分钟累加、最后一次性除 60,演示的 585 分不会出现 9.749999999999 这样的尾巴。
什么时候会拒绝计算:时薪为负、超过 10000、不是数字时;某一行解析不出两个合法时间(如只写了一列、或写了 25:00 这种不存在的小时)会指出具体行号;休息分钟为负会提示。空行自动跳过,不算错误。
结果性质:这是「实际出勤小时 × 时薪」的税前估算,不含加班倍率、个税、社保与迟到扣款,只作出勤对账用。
常见问题
休息分钟填在哪里?
填在每行第三个位置,和开始、结束用空格分开,例如 09:00 12:00 30。不写默认 0 分钟;写了就从净工时里扣掉。
跨天班次怎么算?
结束时间小于等于开始时,页面自动加 24 小时。例如 22:00 到 06:00 当成 22:00 到次日 06:00,净工时 8 小时,不用自己换算。
为什么工资和我对不上?
先检查休息分钟是否多填或漏填,再看时薪单位是不是「元/小时」。演示三行若把第一行休息写成 0,总工时会变成 10.25 小时、工资 512.5 元,差的就是那 30 分钟。
时薪能填小数吗?
能,时薪支持 0.5 这样的小数(步进 0.5)。演示 50 是整数,填 23.5 也能算,工资按 23.5 乘总工时。
会算加班 1.5 倍吗?
本页不区分倍率,所有工时统一按时薪算。需要加班倍率时,把普通工时和加班工时分成两段分别粘贴,再手动把加班段结果乘 1.5 相加。
空行会报错吗?
不会。空白行自动跳过,只有「写了但格式错」的行才提示具体行号,方便你定位哪一行漏了时间。
我的班次数据会被上传吗?
不会。解析与累加都在浏览器内完成,刷新即清空;可在 Network 面板复查,点统计时没有任何请求发出。
支持一次粘贴一整月吗?
支持。每行一组班次,粘多少行算多少行;几千行也能在本地瞬时算完,只是对照表固定显示 12 行起。