面试题答案
一键面试require 'date'
def calculate_expiry_time(order_created_at, holiday_dates)
expiry_time = order_created_at + 72 * 60 * 60 # 初始72小时后过期
current_date = order_created_at.to_date
days_to_add = 0
while days_to_add < 3
current_date += 1
if holiday_dates.include?(current_date)
days_to_add -= 1
end
days_to_add += 1
end
expiry_time = Time.new(current_date.year, current_date.month, current_date.day, order_created_at.hour, order_created_at.min, order_created_at.sec)
return expiry_time
end
假设调用方式如下:
# 示例使用
order_created_at = Time.now
holiday_dates = [Date.today + 1, Date.today + 2]
puts calculate_expiry_time(order_created_at, holiday_dates)
上述代码首先计算出初始72小时后的过期时间,然后通过循环判断顺延的日期是否为节假日,如果是则顺延一天,最终返回订单的最终过期时间。这样的实现保证了代码的可读性、扩展性以及性能的优化,对于新的日期计算逻辑或者节假日判断逻辑可以方便地进行扩展。