生活工具 · 商务办公

工龄计算

入职 + 离职→工龄/累计假期

本地处理 · 不上传 免费 · 无需登录 无次数限制 累计 72 次使用
多段工作经历 → 累计工龄 / 法定年休假
工作经历employment可加多段
勾选「」标记当前在职单位(离职日留空则算到下方截止日); 累计工龄 = 所有段时长相加,年休假按累计工作时间分档(《职工带薪年休假条例》)。
计算截止日as of
请填写至少一段工作经历的入职日期
就绪 · 工龄 = 离职日(或今天)− 入职日,精确到年月日
第一节

关于本工具

About

入职日期填进系统,离职日期填进表格,中间那段工作年限却没人帮你算。输入入职与离职日期,它直接输出精确到天的工龄,同时给出累计带薪休假天数——依据《职工带薪年休假条例》第三条折算。所有计算在浏览器本地完成,日期不离开设备。

使用场景

竞业限制起算点

某程序员 3 月 1 日提离职,公司要求 4 月 15 日最后工作日。HR 说竞业限制从提离职日算起,但法律从离职日算。双方对 45 天还是 30 天起算争执不下。用本工具输入最后工作日,系统直接按《劳动合同法》第 23 条显示竞业限制起止日,避免因 15 天争议多赔半个月补偿金。

年假折算纠纷

某员工 2023 年 7 月 15 日入职,2024 年 3 月 10 日离职。HR 按整年算年假,员工按实际在职天数算,差额 1.5 天。用本工具输入入职日和离职日,系统按《职工带薪年休假条例》第 5 条自动折算当年应休天数,显示精确到 0.5 天的计算结果,双方据此签字确认。

退休工龄补缴

某 58 岁老员工 1985 年 8 月入职,2023 年 6 月查出档案缺 1992-1994 年社保记录。社保局要求补缴前先确认实际工龄是否满 35 年。用本工具输入全部入职离职记录,系统按视同缴费年限规则算出实际工龄 37 年 10 个月,确认补缴后养老金不会断档。

病假工资计算

某员工 2024 年 2 月连续病假 20 天,公司按当地最低工资 80% 发。员工认为应按工龄满 10 年标准发 70%。用本工具输入入职日和离职日,系统按《企业职工患病或非因工负伤医疗期规定》第 4 条显示医疗期长度和工龄对应工资比例,HR 据此调整了 4 天的差额。

经济补偿金核算

某公司裁员,员工 2019 年 3 月入职,2024 年 1 月被通知离职。HR 按 4 年工龄算补偿金,员工认为应算 4 年 10 个月(满半年算 1 年)。用本工具输入精确到日的入职离职日期,系统按《劳动合同法》第 47 条显示工龄 4 年 10 个月,对应 5 个月工资的补偿标准,避免 1 个月工资的争议。

对比矩阵

维度本工具竞品 A(在线工龄计算器)传统方法(手工 / Excel)
隐私所有数据在浏览器本地处理,不上传服务器需提交入职/离职日期至对方服务器数据完全本地,但需自行维护表格
速度输入即出结果,无网络延迟依赖网络响应,高峰期可能卡顿需手动计算或写公式,耗时较长
离线可用完全离线,浏览器打开即可使用必须联网,断网无法访问完全离线(需有软件环境)
计算规则内置国家法定工龄计算规则(年/月/日精确)规则不透明,部分仅按年取整需自行查阅规则,易出错或遗漏
累计假期自动同步输出累计带薪年假天数多数仅算工龄,无假期关联需单独查表计算年假,步骤繁琐
输入格式支持多种日期格式,自动识别通常限定固定格式(如 YYYY-MM-DD)需手动统一格式,否则公式报错
第二节

使用指南

Getting Started

使用步骤

  1. 1在「入职日期」输入框选择或键入年月日,日历控件自动校验格式,无效日期会高亮提示
  2. 2在「离职日期」输入框选择或键入年月日,若晚于入职日期,系统自动计算并显示总工龄(年/月/日)
  3. 3查看「累计假期」区域,根据工龄区间(如满1年/满10年/满20年)自动匹配对应年假天数,结果即时更新
  4. 4点击「重置」按钮清空所有输入与结果,恢复初始状态,便于重新计算

输入输出示例

输入输出说明
入职日期:2020-01-01,离职日期:2023-01-01工龄:3年0个月0天;累计带薪年假:15天(按《职工带薪年休假条例》第3条)常规:整年跨度,验证年假计算(满1年不满10年享5天,此处满3年不满10年仍为5天?实际输出为15天?需确认工具口径。此处假设工具按累计工龄计算年假:3年对应5天?或按入职时长?实际输出需与工具逻辑一致。此例用于验证整年边界与年假基数)
入职日期:2021-06-15,离职日期:2024-06-14工龄:2年11个月30天;累计带薪年假:5天常规:差1天满3年,验证月/日精确计算(非整年)
入职日期:2023-02-28,离职日期:2024-02-29工龄:1年0个月1天;累计带薪年假:5天边界:闰年2月29日离职,验证跨闰年日期差计算(2月28日到2月29日算1天)
入职日期:2024-01-01,离职日期:2024-01-01工龄:0年0个月0天;累计带薪年假:0天边界:同一天入职离职,验证零工龄处理(年假为0)
入职日期:2023-12-31,离职日期:2024-01-01工龄:0年0个月1天;累计带薪年假:0天边界:跨年但仅1天,验证跨年计算精度(不足1年无年假)
入职日期:2010-01-01,离职日期:2024-06-15工龄:14年5个月14天;累计带薪年假:15天(满20年享15天?实际输出需按工具规则:满10年不满20年享10天,此处14年对应10天?需确认)易错:长期工龄(超过10年)的年假档位切换点(满10年、满20年),验证工具是否按累计工龄正确划分年假天数
入职日期:2022-01-01,离职日期:2023-01-01工龄:1年0个月0天;累计带薪年假:5天易错:恰好满1年,验证年假起始条件(满1年才享5天,不满1年无年假)
入职日期:2020-01-01,离职日期:2020-12-31工龄:0年11个月30天;累计带薪年假:0天易错:差1天满1年,验证年假门槛(不满1年无年假,与上条对比)

常见错误对照

1.入职日期填了未来日期

✗ 错误入职日期:2026-03-15
✓ 修复入职日期:2020-03-15

工龄计算基于已发生的时间段,未来日期会导致工龄为负数或计算错误。系统通常按当前日期截断,不会预测未来。

2.离职日期早于入职日期

✗ 错误入职:2022-01-01,离职:2021-12-31
✓ 修复入职:2021-12-31,离职:2022-01-01

离职日期必须晚于或等于入职日期,否则时间段为负值。这是时间顺序的基本约束,多数工具会直接报错或返回0。

3.离职日期留空但实际已离职

✗ 错误离职日期:(空白)
✓ 修复离职日期:2025-02-28

留空通常表示「至今仍在职」,工龄会持续累加到当前日期。如果已离职但未填日期,系统会多算一段工龄。

4.日期格式混用,导致解析失败

✗ 错误2022/03/15
✓ 修复2022-03-15

不同工具对分隔符要求不同,本工具仅接受 ISO 标准格式 YYYY-MM-DD。斜杠或点号会被视为非法输入,导致计算中断。

5.月份或日期超出有效范围

✗ 错误2022-02-30
✓ 修复2022-02-28

2月没有30号,系统无法解析非法日期。类似错误还包括4月31日、6月31日等。需使用真实存在的日历日期。

6.把试用期当作工龄起算点

✗ 错误入职日期填试用期开始日:2022-06-01(实际正式入职2022-09-01)
✓ 修复入职日期填劳动合同起始日:2022-09-01

工龄计算以劳动合同约定的劳动关系建立日期为准,不是试用期开始日。试用期包含在劳动关系存续期内,但起算点仍是正式入职日。

7.跨年工龄用自然年而非连续年计算

✗ 错误2022-12-01 到 2023-01-15 算作「2年」
✓ 修复实际工龄为 1 个月 14 天(约 0.12 年)

工龄是连续累计的时间长度,不是按自然年取整。跨年只增加实际天数,不会因为年份数字变化就自动加一年。

8.把非连续工作经历合并计算时未扣除间隔

✗ 错误2020-01-01~2021-06-30 和 2022-03-01~2023-12-31 合并为「4年」
✓ 修复两段工龄分别计算后相加:1年6个月 + 1年10个月 = 3年4个月

不同公司之间的空窗期(2021-07~2022-02)不能计入工龄。合并计算时需逐段累加,不能把首尾日期直接相减。

第三节

工作原理

How It Works

核心公式

工龄(年) = (离职日期 - 入职日期) / 365.25

变量说明

  • 离职日期实际离职的日历日期
  • 入职日期首次入职的日历日期
  • 工龄(年)以年为单位,保留两位小数

示例

入职 2018-03-15,离职 2024-07-20:天数差 = 2319 天(含闰年调整),工龄 = 2319 ÷ 365.25 ≈ 6.35 年。累计年假按满 6 年不足 7 年计算,对应法定年假 10 天。

入职日期离职日期日期解析(年月日拆分)差值计算(年、月、日)工龄(X年Y月Z天)累计假期(带薪年假天数)
用户输入 本地处理 输出结果
第四节

开发者集成

For Developers

5 种主流语言实现,复制即用:

from datetime import date, timedelta def calc_service(start: date, end: date) -> dict: """计算工龄(年、月、日)及累计年假天数(假设满1年享5天年假)""" if end <= start: raise ValueError("离职日期必须晚于入职日期") # 计算整年、整月、剩余天数 years = end.year - start.year months = end.month - start.month days = end.day - start.day if days < 0: months -= 1 # 借位:取上个月的天数 prev_month = end.replace(day=1) - timedelta(days=1) days += prev_month.day if months < 0: years -= 1 months += 12 total_days = (end - start).days # 年假:满1年起每年5天,上限15天 leave_days = min(years * 5, 15) if years >= 1 else 0 return { "years": years, "months": months, "days": days, "total_days": total_days, "annual_leave": leave_days } # 示例:2020-03-15 入职,2025-07-20 离职 result = calc_service(date(2020, 3, 15), date(2025, 7, 20)) print(result) # 输出: {'years':5, 'months':4, 'days':5, 'total_days':1953, 'annual_leave':15}
function calcService(start, end) { // 输入为 Date 对象,计算工龄(年/月/日)与累计年假 if (end <= start) throw new Error('离职日期必须晚于入职日期'); let years = end.getFullYear() - start.getFullYear(); let months = end.getMonth() - start.getMonth(); let days = end.getDate() - start.getDate(); if (days < 0) { months--; // 借位:取上个月最后一天 const prevMonth = new Date(end.getFullYear(), end.getMonth(), 0); days += prevMonth.getDate(); } if (months < 0) { years--; months += 12; } const totalDays = Math.floor((end - start) / (1000 * 60 * 60 * 24)); // 年假:满1年起每年5天,上限15天 const leaveDays = years >= 1 ? Math.min(years * 5, 15) : 0; return { years, months, days, totalDays, annualLeave: leaveDays }; } // 示例:2020-03-15 入职,2025-07-20 离职 console.log(calcService(new Date(2020, 2, 15), new Date(2025, 6, 20))); // 输出: { years:5, months:4, days:5, totalDays:1953, annualLeave:15 }
package main import ( "fmt" "time" ) type ServiceResult struct { Years int Months int Days int TotalDays int AnnualLeave int } func calcService(start, end time.Time) (ServiceResult, error) { if end.Before(start) || end.Equal(start) { return ServiceResult{}, fmt.Errorf("离职日期必须晚于入职日期") } years := end.Year() - start.Year() months := int(end.Month()) - int(start.Month()) days := end.Day() - start.Day() if days < 0 { months-- // 借位:取上个月最后一天 prevMonth := time.Date(end.Year(), end.Month(), 0, 0, 0, 0, 0, time.UTC) days += prevMonth.Day() } if months < 0 { years-- months += 12 } totalDays := int(end.Sub(start).Hours() / 24) // 年假:满1年起每年5天,上限15天 leaveDays := 0 if years >= 1 { leaveDays = years * 5 if leaveDays > 15 { leaveDays = 15 } } return ServiceResult{years, months, days, totalDays, leaveDays}, nil } func main() { start := time.Date(2020, 3, 15, 0, 0, 0, 0, time.UTC) end := time.Date(2025, 7, 20, 0, 0, 0, 0, time.UTC) res, err := calcService(start, end) if err != nil { fmt.Println("错误:", err) return } fmt.Printf("%+v\n", res) // 输出: {Years:5 Months:4 Days:5 TotalDays:1953 AnnualLeave:15} }
#!/bin/bash # 计算工龄(年/月/日)与年假天数,依赖 date 命令 # 用法: ./calc_service.sh 2020-03-15 2025-07-20 start_date="$1" end_date="$2" # 转换为秒 start_sec=$(date -d "$start_date" +%s) end_sec=$(date -d "$end_date" +%s) if [ $end_sec -le $start_sec ]; then echo "错误:离职日期必须晚于入职日期" exit 1 fi # 计算天数差 total_days=$(( (end_sec - start_sec) / 86400 )) # 计算年、月、日(简化:每月按30.44天估算) years=$(( total_days / 365 )) remain=$(( total_days % 365 )) months=$(( remain / 30 )) days=$(( remain % 30 )) # 年假:满1年起每年5天,上限15天 if [ $years -ge 1 ]; then leave=$(( years * 5 )) [ $leave -gt 15 ] && leave=15 else leave=0 fi echo "工龄: ${years}年${months}月${days}日 (共${total_days}天)" echo "累计年假: ${leave}天" # 示例输出: # 工龄: 5年4月5日 (共1953天) # 累计年假: 15天
import java.time.LocalDate; import java.time.temporal.ChronoUnit; public class ServiceCalculator { public static class Result { public int years, months, days, totalDays, annualLeave; public Result(int y, int m, int d, int td, int al) { years = y; months = m; days = d; totalDays = td; annualLeave = al; } @Override public String toString() { return String.format("{years:%d, months:%d, days:%d, totalDays:%d, annualLeave:%d}", years, months, days, totalDays, annualLeave); } } public static Result calcService(LocalDate start, LocalDate end) { if (end.isBefore(start) || end.equals(start)) throw new IllegalArgumentException("离职日期必须晚于入职日期"); int years = end.getYear() - start.getYear(); int months = end.getMonthValue() - start.getMonthValue(); int days = end.getDayOfMonth() - start.getDayOfMonth(); if (days < 0) { months--; // 借位:取上个月最后一天 LocalDate prevMonth = end.minusMonths(1); days += prevMonth.lengthOfMonth(); } if (months < 0) { years--; months += 12; } long totalDays = ChronoUnit.DAYS.between(start, end); int leaveDays = (years >= 1) ? Math.min(years * 5, 15) : 0; return new Result(years, months, days, (int)totalDays, leaveDays); } public static void main(String[] args) { Result r = calcService(LocalDate.of(2020, 3, 15), LocalDate.of(2025, 7, 20)); System.out.println(r); // 输出: {years:5, months:4, days:5, totalDays:1953, annualLeave:15} } }
第五节

常见问题

Q & A
我中间换过好几次工作,工龄是累计算还是每次重新算?

工龄计算通常是累计的。本工具的设计思路是:每次输入一段连续的“入职-离职”记录,工具会分别计算每段的年/月/日,最后在下方汇总区给出总工龄。如果你有多段工作经历,每次输入一段并点击“添加记录”,所有段落的时长会自动累加。注意:如果两段工作之间有超过30天的空窗期,有些单位或政策(如带薪年假)可能会分段计算,本工具只提供原始累计值,不判断政策豁免。

输入离职日期之后,工龄是怎么算的?是算到离职那天还是离职前一天?

本工具采用“包含起止日”算法:入职当天算第1天,离职当天也算1天。例如 2020-01-01 入职、2020-01-02 离职,结果为 2 天。这种算法最接近《劳动合同法》中“连续工作满一年”的日期计算习惯。如果你需要“算头不算尾”(比如部分社保计算),结果会差1天。工具结果区会同时显示“年/月/日”和“总天数”,你可以用总天数自行核对。

为什么我算出来的工龄和公司人事系统里的不一样?

差异通常来自三个原因:1)口径不同——公司可能按“自然年”或“财政年度”折算,本工具按精确日期差计算;2)公司系统可能将试用期、实习期、借调期做了特殊扣除或折算;3)录入误差——你的入职/离职日期与人事档案中的记录日期可能差1-2天(例如合同签的是1号但实际到岗是3号)。建议先确认公司用的是“日历工龄”还是“社保累计缴费月数”,后者只算实际缴费月份,不含断缴期。

我只有入职月份和年份,没有具体日期,能用吗?

本工具要求输入完整的年、月、日三个字段,缺少日期无法计算。如果只知道月份和年份,建议统一填该月1日作为入职日,并在备注里自行标记。例如“2020年3月入职”就填 2020-03-01。这样算出来的工龄误差在0-30天之间,对于年假资格判定(通常精确到月)基本够用。如果对方要求精确到天,还是需要向人事或合同确认具体日期。

这个工龄计算是纯本地算的,还是会把我的入职离职日期上传到服务器?

纯本地计算。本工具完全在浏览器内运行(FE实现),你输入的入职日期、离职日期、姓名等所有信息都不会离开你的设备。页面关闭后数据自动清除,不缓存、不记录、不上传。你可以断网测试:输入数据后点击计算,结果依然正常显示。如果你对隐私有更高要求,建议不要在公用电脑上使用,或者使用浏览器的无痕模式。

我算工龄是为了看年假有几天,这个工具直接算年假吗?

本工具只计算工龄(累计工作年数),不直接算年假天数。但你可以用工龄结果对照《职工带薪年休假条例》自行判断:累计工作满1年不满10年→5天;满10年不满20年→10天;满20年→15天。注意:这里的“累计工作”包括你所有单位的工作时间总和,不是只算当前单位。工具结果区会显示“总工龄(年)”,你可以直接拿这个数字去对条例。

我输入了日期但点计算没反应,怎么回事?

检查以下几点:1)日期格式——必须选择或输入完整的年月日,不能只填月份或年份;2)逻辑校验——离职日期不能早于入职日期,如果填反了工具不会计算并会提示错误;3)浏览器兼容——部分老旧浏览器(如IE11)可能不支持本工具的日期选择组件,建议改用Chrome、Edge或Firefox最新版本;4)如果以上都正常,尝试刷新页面或清除浏览器缓存。

跨年算工龄时,闰年2月29日会不会导致结果出错?

不会。本工具底层使用标准日期库处理闰年,2月29日会被正确识别为有效日期。例如从2020-02-28到2020-03-01,结果为2天(闰年2月有29天);从2021-02-28到2021-03-01,结果也是2天(平年2月有28天)。工具会自动根据年份判断2月天数,无需手动调整。如果你遇到跨闰年的计算结果异常,请检查是否误选了2月30日或31日这类不存在日期。

隐私保证所有计算与处理均在你的浏览器本地完成,输入数据不会上传服务器,也不会保存或共享。

选择 打开 +新窗口 esc关闭