5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
|
# File 'lib/since_when.rb', line 5
def self.time_since date, scope = :month
days_in_month = [31, date.year%4 == 0 ? 29 : 28 , 31, 30, 31, 30, 31, 31, 30, 31, 30, 31]
scope_arr = %w(year month day hour minute second)
time_string = ""
if date.class != Date
unless date.class == DateTime
date = date.to_datetime
end
hour_dif = DateTime.now.hour - date.hour
minute_dif = DateTime.now.minute - date.minute
second_dif = DateTime.now.second - date.second
if (DateTime.now - date) < 0
throw "Future dates are not allowed."
end
end
day_dif = Date.today.day - date.day
month_dif = Date.today.month - date.month
year_dif = Date.today.year - date.year
if second_dif && second_dif < 0
minute_dif -= 1
second_dif += 60
end
if minute_dif && minute_dif < 0
hour_dif -= 1
minute_dif += 60
end
if hour_dif && hour_dif < 0
day_dif -= 1
hour_dif += 24
end
if day_dif < 0
month_dif -= 1
day_dif += days_in_month[date.month + 1]
end
if month_dif < 0
year_dif -= 1
month_dif += 12
end
if scope_arr.include?(scope.to_s)
if year_dif > 0
time_string << "#{year_dif} #{year_dif > 1 ? 'years' : 'year' }"
end
if month_dif > 0
time_string << " #{month_dif} #{month_dif > 1 ? 'months' : 'month'}"
end
unless scope == :month
if day_dif > 0
time_string << " #{day_dif} #{day_dif > 1 ? 'days' : 'day'}"
end
unless scope == :day
if hour_dif > 0
time_string << " #{hour_dif} #{hour_dif > 1 ? 'hours' : 'hour'}"
end
unless scope == :hour
if minute_dif > 0
time_string << " #{minute_dif} #{minute_dif > 1 ? 'minutes' : 'minute'}"
end
unless scope == :minute
if second_dif > 0
time_string << " #{second_dif} #{second_dif > 1 ? 'seconds' : 'second'}"
end
end
end
end
end
end
time_string
end
|