工时表生成器

把每天的上班、下班和休息分钟按行粘进来,本页逐行算出净工时,全部相加得总工时,再乘以时薪得到应发工资。所有计算在浏览器里完成,不上传服务器。

每行格式:开始 结束 休息分钟,例如 09:00 12:00 30 表示 9 点上班、12 点下班、休息 30 分钟,净工时 2.5 小时。时间用 24 小时制;跨天班次(结束小于开始)自动加 24 小时。

使用方法

工时表生成器把零散的打卡记录汇总成一张工资单,只要三步:

  1. 「时薪」填你的 hourly rate,演示值 50 元/小时;按 0 算则只给总工时不给工资。
  2. 「班次明细」每行写一组 开始 结束 休息分钟。演示三行是 09:00 12:00 30、13:30 18:00 0、09:00 12:30 45。
  3. 按「统计工时与工资」,或在大文本框里按 Ctrl/Cmd + Enter。四张卡片给总工时、应发工资、有效天数、日均;下方对照表按 12 行起、加载更多补到 20 行。
  4. 想还原演示按「载入示例」。

工时表生成器能解决什么

它解决「打卡记录散、月底不会加」的痛点,适合三类人:

  • 兼职与自由职业:每天工时不一,手工加容易漏行。演示三行分别 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 元,列出不同总工时对应的应发工资,方便你反推排班:

时薪 50 元时,总工时与应发工资对照
总工时(小时)应发工资(元)总工时(小时)应发工资(元)
1507350
21008400
31509450
420010500
52509.75(演示值)487.5
630012600

对照表每 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 行起。

相关工具