Если вам нужно быть более строгим с месяцами, вы можете использовать этот код
require 'date'
class MyDateCalculator
def time_expiry_text(hours) # unit of time is hours
time_expiry_text = ''
if( hours < 24)
time_expiry_text = format(hours, 'hour')
else
days = hours/24
now = DateTime.now
now_month = months_since_epoch now
expiry_date = now.to_date + days
expiry_month = months_since_epoch expiry_date
months = expiry_month - now_month
if months == 0 or (months == 1 and expiry_date.day < now.day)
time_expiry_text = format(days, 'day')
else
time_expiry_text = format(months, 'month')
if expiry_date >= now.to_date.next_month( months ) + 1
extra_days = expiry_date - now.to_date.next_month( months )
time_expiry_text += ' ' +time_expiry_text( extra_days.to_i * 24)
end
end
end
return time_expiry_text
end
private
def format(number, unit)
text = "#{number} #{unit}"
number == 1 ? text : text+'s'
end
def months_since_epoch(date)
return date.year * 12 + date.month
end
end
Как видите, это намного сложнее, чем предлагал Кайл, и единственное преимущество, которое даетмесяцы рассчитаны правильно.