time_diff 0.2.0 → 0.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/README +47 -18
- data/README.rdoc +47 -16
- data/VERSION +1 -1
- data/lib/time_diff.rb +47 -13
- data/test/test_time_diff.rb +2 -0
- data/time_diff.gemspec +2 -2
- metadata +4 -4
data/README
CHANGED
@@ -1,34 +1,63 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
= time_diff
|
2
|
+
Gem which calculates the difference between two time
|
3
3
|
|
4
|
-
|
4
|
+
== Installation
|
5
5
|
|
6
|
-
|
7
|
-
-----
|
6
|
+
gem install time_diff
|
8
7
|
|
9
|
-
|
8
|
+
== Usage
|
10
9
|
|
11
|
-
|
10
|
+
require 'time_diff'
|
11
|
+
|
12
|
+
time_diff_components = Time.diff(start_date_time, end_date_time)
|
12
13
|
|
13
14
|
This will return the hash of time difference in terms of years, month, week, day, hour, minute and second.
|
14
15
|
|
15
16
|
You can use the difference like:
|
16
17
|
|
17
|
-
|
18
|
+
time_diff_components[:year], time_diff_components[:month], time_diff_components[:week]
|
19
|
+
|
20
|
+
== Formatted Time difference
|
21
|
+
|
22
|
+
%y - year
|
23
|
+
|
24
|
+
%M - month
|
25
|
+
|
26
|
+
%w - week
|
27
|
+
|
28
|
+
%d - day
|
29
|
+
|
30
|
+
%H - hour
|
31
|
+
|
32
|
+
%N - minute
|
18
33
|
|
34
|
+
%S - second
|
19
35
|
|
20
|
-
|
21
|
-
-------------------------
|
36
|
+
%h - hour (without adding 'hour' text to the hours. eg: 3 for 3 hours)
|
22
37
|
|
23
|
-
%
|
24
|
-
|
25
|
-
%
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
%s
|
38
|
+
%m - minute (without adding 'minute' text)
|
39
|
+
|
40
|
+
%s - second (without adding 'second' text)
|
41
|
+
|
42
|
+
By default the format is
|
43
|
+
|
44
|
+
'%y, %M, %w, %d and %h:%m:%s'
|
45
|
+
|
46
|
+
this will return
|
47
|
+
|
48
|
+
'1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
|
30
49
|
|
31
|
-
By default the format is '%y, %M, %w, %d and %h:%m:%s' this will return '1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
|
32
50
|
You will get the result from the output hash, time_diff_components[:diff]
|
33
51
|
|
34
52
|
You can pass your own format as third parameter to this function.
|
53
|
+
|
54
|
+
If you give '%d %h' as the third parameter to the Time.diff() method, then the difference(time_diff_components[:diff]) will be calculated only in days and hours.
|
55
|
+
|
56
|
+
== Examples
|
57
|
+
|
58
|
+
> Time.diff(Time.parse('2011-03-06'), Time.parse('2011-03-07'))
|
59
|
+
=> {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 0, :diff => '1 day and 00:00:00'}
|
60
|
+
> Time.diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%y, %d and %h:%m:%s')
|
61
|
+
=> {:year => 1, :month => 0, :week => 0, :day => 0, :hour => 18, :minute => 0, :second => 30, :diff => '1 year and 18:00:30'}
|
62
|
+
> Time.diff(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%H %N %S')
|
63
|
+
=> {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 30, :diff => '24 hours 0 minute 30 seconds'}
|
data/README.rdoc
CHANGED
@@ -1,36 +1,67 @@
|
|
1
1
|
= time_diff
|
2
|
+
Gem which calculates the difference between two time
|
2
3
|
|
3
|
-
==
|
4
|
+
== Installation
|
4
5
|
|
5
|
-
gem install time_diff
|
6
|
+
gem install time_diff
|
6
7
|
|
7
|
-
==Usage
|
8
|
+
== Usage
|
8
9
|
|
9
|
-
require 'time_diff'
|
10
|
+
require 'time_diff'
|
10
11
|
|
11
|
-
time_diff_components = Time.diff(start_date_time, end_date_time)
|
12
|
+
time_diff_components = Time.diff(start_date_time, end_date_time)
|
12
13
|
|
13
14
|
This will return the hash of time difference in terms of years, month, week, day, hour, minute and second.
|
14
15
|
|
15
16
|
You can use the difference like:
|
16
17
|
|
17
|
-
time_diff_components[:year], time_diff_components[:month], time_diff_components[:week]
|
18
|
+
time_diff_components[:year], time_diff_components[:month], time_diff_components[:week]
|
18
19
|
|
19
|
-
==Formatted Time difference
|
20
|
+
== Formatted Time difference
|
20
21
|
|
21
|
-
%y - year
|
22
|
-
|
23
|
-
%
|
24
|
-
|
25
|
-
%
|
26
|
-
|
27
|
-
%
|
22
|
+
%y - year
|
23
|
+
|
24
|
+
%M - month
|
25
|
+
|
26
|
+
%w - week
|
27
|
+
|
28
|
+
%d - day
|
29
|
+
|
30
|
+
%H - hour
|
31
|
+
|
32
|
+
%N - minute
|
33
|
+
|
34
|
+
%S - second
|
35
|
+
|
36
|
+
%h - hour (without adding 'hour' text to the hours. eg: 3 for 3 hours)
|
37
|
+
|
38
|
+
%m - minute (without adding 'minute' text)
|
39
|
+
|
40
|
+
%s - second (without adding 'second' text)
|
41
|
+
|
42
|
+
By default the format is
|
43
|
+
|
44
|
+
'%y, %M, %w, %d and %h:%m:%s'
|
45
|
+
|
46
|
+
this will return
|
47
|
+
|
48
|
+
'1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
|
28
49
|
|
29
|
-
By default the format is '%y, %M, %w, %d and %h:%m:%s' this will return '1 year, 2 months, 3 weeks, 4 days and 12:05:52'.
|
30
50
|
You will get the result from the output hash, time_diff_components[:diff]
|
31
51
|
|
32
52
|
You can pass your own format as third parameter to this function.
|
33
53
|
|
54
|
+
If you give '%d %h' as the third parameter to the Time.diff() method, then the difference(time_diff_components[:diff]) will be calculated only in days and hours.
|
55
|
+
|
56
|
+
== Examples
|
57
|
+
|
58
|
+
> Time.diff(Time.parse('2011-03-06'), Time.parse('2011-03-07'))
|
59
|
+
=> {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 0, :diff => '1 day and 00:00:00'}
|
60
|
+
> Time.diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%y, %d and %h:%m:%s')
|
61
|
+
=> {:year => 1, :month => 0, :week => 0, :day => 0, :hour => 18, :minute => 0, :second => 30, :diff => '1 year and 18:00:30'}
|
62
|
+
> Time.diff(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%H %N %S')
|
63
|
+
=> {:year => 0, :month => 0, :week => 0, :day => 1, :hour => 0, :minute => 0, :second => 30, :diff => '24 hours 0 minute 30 seconds'}
|
64
|
+
|
34
65
|
== Contributing to time_diff
|
35
66
|
|
36
67
|
* Check out the latest master to make sure the feature hasn't been implemented or the bug hasn't been fixed yet
|
@@ -43,6 +74,6 @@ You can pass your own format as third parameter to this function.
|
|
43
74
|
|
44
75
|
== Copyright
|
45
76
|
|
46
|
-
Copyright (c) 2011
|
77
|
+
Copyright (c) 2011 abhidsm. See LICENSE.txt for
|
47
78
|
further details.
|
48
79
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.2.
|
1
|
+
0.2.1
|
data/lib/time_diff.rb
CHANGED
@@ -6,27 +6,61 @@ class Time
|
|
6
6
|
start_time = start_date.to_time if start_date.respond_to?(:to_time)
|
7
7
|
end_time = end_date.to_time if end_date.respond_to?(:to_time)
|
8
8
|
distance_in_seconds = ((end_time - start_time).abs).round
|
9
|
-
components = []
|
10
9
|
|
11
|
-
%w(year month week day hour minute second)
|
10
|
+
components = get_time_diff_components(%w(year month week day hour minute second), distance_in_seconds)
|
11
|
+
time_diff_components = {:year => components[0], :month => components[1], :week => components[2], :day => components[3], :hour => components[4], :minute => components[5], :second => components[6]}
|
12
|
+
|
13
|
+
formatted_intervals = get_formatted_intervals(format_string)
|
14
|
+
components = get_time_diff_components(formatted_intervals, distance_in_seconds)
|
15
|
+
formatted_components = create_formatted_component_hash(components, formatted_intervals)
|
16
|
+
format_string = remove_format_string_for_zero_components(formatted_components, format_string)
|
17
|
+
time_diff_components[:diff] = format_date_time(formatted_components, format_string) unless format_string.nil?
|
18
|
+
return time_diff_components
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.get_formatted_intervals(format_string)
|
22
|
+
intervals = []
|
23
|
+
intervals << 'year' if format_string.include?('%y')
|
24
|
+
intervals << 'month' if format_string.include?('%M')
|
25
|
+
intervals << 'week' if format_string.include?('%w')
|
26
|
+
intervals << 'day' if format_string.include?('%d')
|
27
|
+
intervals << 'hour' if format_string.include?('%h') || format_string.include?('%H')
|
28
|
+
intervals << 'minute' if format_string.include?('%m') || format_string.include?('%N')
|
29
|
+
intervals << 'second' if format_string.include?('%s') || format_string.include?('%S')
|
30
|
+
intervals
|
31
|
+
end
|
32
|
+
|
33
|
+
def self.create_formatted_component_hash(components, formatted_intervals)
|
34
|
+
formatted_components = {}
|
35
|
+
index = 0
|
36
|
+
components.each do |component|
|
37
|
+
formatted_components[:"#{formatted_intervals[index]}"] = component
|
38
|
+
index = index + 1
|
39
|
+
end
|
40
|
+
formatted_components
|
41
|
+
end
|
42
|
+
|
43
|
+
def self.get_time_diff_components(intervals, distance_in_seconds)
|
44
|
+
components = []
|
45
|
+
intervals.each do |interval|
|
12
46
|
component = (distance_in_seconds / 1.send(interval)).floor
|
13
47
|
distance_in_seconds -= component.send(interval)
|
14
48
|
components << component
|
15
49
|
end
|
16
|
-
|
17
|
-
format_string = remove_format_string_for_zero_components(time_diff_components, format_string)
|
18
|
-
time_diff_components[:diff] = format_date_time(time_diff_components, format_string) unless format_string.nil?
|
19
|
-
return time_diff_components
|
50
|
+
components
|
20
51
|
end
|
21
52
|
|
22
53
|
def Time.format_date_time(time_diff_components, format_string)
|
23
|
-
format_string.gsub!('%y', "#{time_diff_components[:year]} #{pluralize('year', time_diff_components[:year])}")
|
24
|
-
format_string.gsub!('%M', "#{time_diff_components[:month]} #{pluralize('month', time_diff_components[:month])}")
|
25
|
-
format_string.gsub!('%w', "#{time_diff_components[:week]} #{pluralize('week', time_diff_components[:week])}")
|
26
|
-
format_string.gsub!('%d', "#{time_diff_components[:day]} #{pluralize('day', time_diff_components[:day])}")
|
27
|
-
format_string.gsub!('%
|
28
|
-
format_string.gsub!('%
|
29
|
-
format_string.gsub!('%
|
54
|
+
format_string.gsub!('%y', "#{time_diff_components[:year]} #{pluralize('year', time_diff_components[:year])}") if time_diff_components[:year]
|
55
|
+
format_string.gsub!('%M', "#{time_diff_components[:month]} #{pluralize('month', time_diff_components[:month])}") if time_diff_components[:month]
|
56
|
+
format_string.gsub!('%w', "#{time_diff_components[:week]} #{pluralize('week', time_diff_components[:week])}") if time_diff_components[:week]
|
57
|
+
format_string.gsub!('%d', "#{time_diff_components[:day]} #{pluralize('day', time_diff_components[:day])}") if time_diff_components[:day]
|
58
|
+
format_string.gsub!('%H', "#{time_diff_components[:hour]} #{pluralize('hour', time_diff_components[:hour])}") if time_diff_components[:hour]
|
59
|
+
format_string.gsub!('%N', "#{time_diff_components[:minute]} #{pluralize('minute', time_diff_components[:minute])}") if time_diff_components[:minute]
|
60
|
+
format_string.gsub!('%S', "#{time_diff_components[:second]} #{pluralize('second', time_diff_components[:second])}") if time_diff_components[:second]
|
61
|
+
format_string.gsub!('%h', format_digit(time_diff_components[:hour]).to_s) if time_diff_components[:hour]
|
62
|
+
format_string.gsub!('%m', format_digit(time_diff_components[:minute]).to_s) if time_diff_components[:minute]
|
63
|
+
format_string.gsub!('%s', format_digit(time_diff_components[:second]).to_s) if time_diff_components[:second]
|
30
64
|
format_string
|
31
65
|
end
|
32
66
|
|
data/test/test_time_diff.rb
CHANGED
@@ -13,6 +13,8 @@ class TestTimeDiff < Test::Unit::TestCase
|
|
13
13
|
|
14
14
|
should "return the time difference in a formatted text" do
|
15
15
|
assert_test_scenarios_for_formatted_diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%y, %d and %h:%m:%s', '1 year and 18:00:30')
|
16
|
+
assert_test_scenarios_for_formatted_diff(Time.parse('2010-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%d %H %N %S', '366 days 0 hour 0 minute 30 seconds')
|
17
|
+
assert_test_scenarios_for_formatted_diff(Time.parse('2011-03-06 12:30:00'), Time.parse('2011-03-07 12:30:30'), '%H %N %S', '24 hours 0 minute 30 seconds')
|
16
18
|
end
|
17
19
|
|
18
20
|
def assert_test_scenarios(start_date, end_date, expected_result)
|
data/time_diff.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{time_diff}
|
8
|
-
s.version = "0.2.
|
8
|
+
s.version = "0.2.1"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["abhilash"]
|
12
|
-
s.date = %q{2011-04-
|
12
|
+
s.date = %q{2011-04-10}
|
13
13
|
s.description = %q{It returns a hash file with the difference in terms of year, month, week, day, hour, minute and second}
|
14
14
|
s.email = %q{abhidsm@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: time_diff
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 21
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 2
|
9
|
-
-
|
10
|
-
version: 0.2.
|
9
|
+
- 1
|
10
|
+
version: 0.2.1
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- abhilash
|
@@ -15,7 +15,7 @@ autorequire:
|
|
15
15
|
bindir: bin
|
16
16
|
cert_chain: []
|
17
17
|
|
18
|
-
date: 2011-04-
|
18
|
+
date: 2011-04-10 00:00:00 +05:30
|
19
19
|
default_executable:
|
20
20
|
dependencies:
|
21
21
|
- !ruby/object:Gem::Dependency
|