Class: Date
- Defined in:
- lib/standard/facets/date.rb,
lib/standard/facets/date/cmp.rb
Overview
Date
This new version of Date extension has been largely improved by porting some of the methods used by ActiveSupport. The old version already had much in common with the Active Support library, so it was decided to take it a step further in that direction for the sake of interoparability.
Hopefully most of these methods will find there way into Ruby’s own standard library eventually.
The biggest difference with ActiveSupport is the lack of many of the “English-esque” methods, and that we use #stamp with Date::FORMAT, instead of #to_formmated_s with Date::DATE_FORMATS. We do not override the standard #to_s method like ActiveSupport does.
Constant Summary collapse
- FORMAT =
{ :short => "%e %b", :long => "%B %e, %Y", :db => "%Y-%m-%d", :number => "%Y%m%d", :rfc822 => "%e %b %Y", :default => "%Y-%m-%d", nil => "%Y-%m-%d" }
Class Method Summary collapse
-
.current ⇒ Object
Returns Time.zone.today when config.time_zone is set, otherwise just returns Date.today.
-
.tomorrow ⇒ Object
Returns a new Date representing the date 1 day after today (i.e. tomorrow’s date).
-
.yesterday ⇒ Object
Returns a new Date representing the date 1 day ago (i.e. yesterday’s date).
Instance Method Summary collapse
-
#<=>(other) ⇒ Object
Allow for Date <=> DateTime <=> Time, to work as expected.
-
#advance(options) ⇒ Object
Provides precise Date calculations for years, months, and days.
-
#ago(seconds) ⇒ Object
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then subtracts the specified number of seconds.
-
#beginning_of_day ⇒ Object
(also: #midnight)
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00).
-
#change(options) ⇒ Object
Returns a new Date where one or more of the elements have been changed according to the
options
parameter. -
#days_in_month ⇒ Object
Returns the number of days in the date’s month.
- #days_of_month ⇒ Object
-
#month_name ⇒ Object
Get the month name for this date object.
- #old_compare ⇒ Object private
-
#since(seconds) ⇒ Object
(also: #in)
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then adds the specified number of seconds.
-
#stamp(format = :default) ⇒ Object
Convert to a formatted string.
-
#to_date ⇒ Object
A method to keep Time, Date and DateTime instances interchangeable on conversions.
-
#to_datetime ⇒ Object
Converts a Date instance to a DateTime, where the time is set to the beginning of the day and UTC offset is set to 0.
-
#to_time(form = :local) ⇒ Object
Converts a Date instance to a Time, where the time is set to the beginning of the day.
-
#tomorrow ⇒ Object
Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time.
- #xmlschema ⇒ Object
-
#yesterday ⇒ Object
Convenience method which returns a new Date/DateTime representing the time 1 day ago.
Class Method Details
.current ⇒ Object
Returns Time.zone.today when config.time_zone is set, otherwise just returns Date.today.
44 45 46 |
# File 'lib/standard/facets/date.rb', line 44 def self.current ::Time.zone_default ? ::Time.zone.today : ::Date.today end |
Instance Method Details
#<=>(other) ⇒ Object
Allow for Date <=> DateTime <=> Time, to work as expected.
25 26 27 28 29 30 31 |
# File 'lib/standard/facets/date/cmp.rb', line 25 def <=>(other) if Time === other self.to_datetime <=> other.to_datetime else old_compare(other) end end |
#advance(options) ⇒ Object
Provides precise Date calculations for years, months, and days. The options
parameter takes a hash with any of these keys: :years
, :months
, :weeks
, :days
.
138 139 140 141 142 143 144 145 |
# File 'lib/standard/facets/date.rb', line 138 def advance() d = self d = d >> .delete(:years) * 12 if [:years] d = d >> .delete(:months) if [:months] d = d + .delete(:weeks) * 7 if [:weeks] d = d + .delete(:days) if [:days] d end |
#ago(seconds) ⇒ Object
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then subtracts the specified number of seconds
164 165 166 |
# File 'lib/standard/facets/date.rb', line 164 def ago(seconds) to_time.since(-seconds) end |
#beginning_of_day ⇒ Object Also known as: midnight
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00).
178 179 180 |
# File 'lib/standard/facets/date.rb', line 178 def beginning_of_day to_time end |
#change(options) ⇒ Object
153 154 155 156 157 158 159 |
# File 'lib/standard/facets/date.rb', line 153 def change() ::Date.new( [:year] || self.year, [:month] || self.month, [:day] || self.day ) end |
#days_in_month ⇒ Object
Returns the number of days in the date’s month.
Date.new(2004,2).days_in_month #=> 29
CREDIT: Ken Kunz.
89 90 91 |
# File 'lib/standard/facets/date.rb', line 89 def days_in_month Date.civil(year, month, -1).day end |
#days_of_month ⇒ Object
93 94 95 |
# File 'lib/standard/facets/date.rb', line 93 def days_of_month (1..days_in_month).to_a end |
#month_name ⇒ Object
Get the month name for this date object
CREDIT: Benjamin Oakes
100 101 102 |
# File 'lib/standard/facets/date.rb', line 100 def month_name MONTHNAMES[self.month] end |
#old_compare ⇒ Object (private)
20 |
# File 'lib/standard/facets/date/cmp.rb', line 20 alias_method :old_compare, :<=> |
#since(seconds) ⇒ Object Also known as: in
Converts Date to a Time (or DateTime if necessary) with the time portion set to the beginning of the day (0:00) and then adds the specified number of seconds.
171 172 173 |
# File 'lib/standard/facets/date.rb', line 171 def since(seconds) to_time.since(seconds) end |
#stamp(format = :default) ⇒ Object
Convert to a formatted string. See DATE_FORMATS for predefined formats.
This method is aliased to to_s
.
date = Date.new(2007, 11, 10) # Sat, 10 Nov 2007
date.stamp(:db) # => "2007-11-10"
date.stamp(:short) # => "10 Nov"
date.stamp(:long) # => "November 10, 2007"
date.stamp(:rfc822) # => "10 Nov 2007"
Adding your own formats to stamp
You can add your own formats to the Date::FORMAT hash. Use the format name as the hash key and a strftime string as the value. Eg.
Date::FORMAT[:month_and_year] = "%B %Y"
122 123 124 125 126 127 128 |
# File 'lib/standard/facets/date.rb', line 122 def stamp(format=:default) if formatter = FORMAT[format] strftime(formatter) else to_s end end |
#to_date ⇒ Object
A method to keep Time, Date and DateTime instances interchangeable on conversions. In this case, it simply returns self
.
50 51 52 |
# File 'lib/standard/facets/date.rb', line 50 def to_date self end |
#to_datetime ⇒ Object
Converts a Date instance to a DateTime, where the time is set to the beginning of the day and UTC offset is set to 0.
date = Date.new(2007, 11, 10) # Sat, 10 Nov 2007
date.to_datetime # Sat, 10 Nov 2007 00:00:00 0000
60 61 62 |
# File 'lib/standard/facets/date.rb', line 60 def to_datetime ::DateTime.civil(year, month, day, 0, 0, 0, 0) end |
#to_time(form = :local) ⇒ Object
Converts a Date instance to a Time, where the time is set to the beginning of the day. The timezone can be either :local or :utc (default :local).
date = Date.new(2007, 11, 10) # Sat, 10 Nov 2007
date.to_time # Sat Nov 10 00:00:00 0800 2007
date.to_time(:local) # Sat Nov 10 00:00:00 0800 2007
date.to_time(:utc) # Sat Nov 10 00:00:00 UTC 2007
74 75 76 77 |
# File 'lib/standard/facets/date.rb', line 74 def to_time(form=:local) ::Time.send(form, year, month, day) ##::Time.send("#{form}_time", year, month, day) end |
#tomorrow ⇒ Object
Convenience method which returns a new Date/DateTime representing the time 1 day since the instance time.
191 192 193 |
# File 'lib/standard/facets/date.rb', line 191 def tomorrow self + 1 end |
#xmlschema ⇒ Object
80 81 82 |
# File 'lib/standard/facets/date.rb', line 80 def xmlschema to_time.xmlschema end |
#yesterday ⇒ Object
Convenience method which returns a new Date/DateTime representing the time 1 day ago.
185 186 187 |
# File 'lib/standard/facets/date.rb', line 185 def yesterday self - 1 end |