基于服务年限的年假天数计算实现求助(附服务年限计算代码)
基于服务年限计算年假天数的Ruby实现方案
没问题,我来帮你把这个年假匹配的逻辑用if语句实现出来~首先先明确咱们的规则边界:
- 服务满1年但不满3年:15天年假
- 服务满3年但不满5年:17天年假
- 服务满5年但不满10年:20天年假
- 服务满10年及以上:25天年假
首先我先帮你优化一下原有的year_of_service方法——里面定义的years数组没被用到,属于冗余代码,我给去掉了,同时把HTML转义的符号(>、&&)换回Ruby原生的运算符,让代码更易读:
def year_of_service(date_of_hired) now = Time.now.utc.to_date # 先计算年份差 service_years = now.year - date_of_hired.year # 如果当前的月日还没到入职当天的月日,说明还没满整一年,要减1 service_years -= 1 if now.month < date_of_hired.month || (now.month == date_of_hired.month && now.day < date_of_hired.day) service_years end
接下来,咱们基于这个方法,用if-elsif-else结构实现年假天数的匹配逻辑,写成一个独立的方法:
def annual_leave_days(date_of_hired) service_years = year_of_service(date_of_hired) # 从最高年限往下判断,逻辑更简洁 if service_years >= 10 25 elsif service_years >= 5 20 elsif service_years >= 3 17 elsif service_years >= 1 15 else # 服务不满1年的情况,可根据公司实际规则调整,这里默认返回0 0 end end
代码说明:
- 判断顺序:从最高年限(10年及以上)开始判断,这样只要满足高年限条件就会直接返回结果,不用再执行后续判断,逻辑更高效。
- 边界处理:刚好满3年、5年、10年的员工会自动匹配到对应的年假天数,完全符合你给出的规则。
- 不满1年的情况:如果公司对不满1年的员工有其他年假规则(比如按比例折算),直接修改
else分支的返回值即可。
测试示例:
你可以用以下代码测试不同入职时间的结果:
# 入职满10年(2013年5月1日) puts annual_leave_days(Date.new(2013, 5, 1)) # 输出:25 # 入职满5年(2018年5月1日) puts annual_leave_days(Date.new(2018, 5, 1)) # 输出:20 # 入职满3年(2020年5月1日) puts annual_leave_days(Date.new(2020, 5, 1)) # 输出:17 # 入职满1年(2022年5月1日) puts annual_leave_days(Date.new(2022, 5, 1)) # 输出:15 # 入职不满1年(2023年6月1日) puts annual_leave_days(Date.new(2023, 6, 1)) # 输出:0
内容的提问来源于stack exchange,提问作者ImpostorIsAsking
相关产品推荐
相关产品推荐

