Class: DateTime
Class Method Summary collapse
Instance Method Summary collapse
-
#advance(options) ⇒ Object
Uses Date to provide precise Time calculations for years, months, and days.
-
#ago(seconds) ⇒ Object
Returns a new DateTime representing the time a number of seconds ago Do not use this method in combination with x.months, use months_ago instead!.
-
#beginning_of_day ⇒ Object
(also: #midnight)
Returns a new DateTime representing the start of the day (0:00).
-
#change(options) ⇒ Object
Returns a new DateTime where one or more of the elements have been changed according to the
options
parameter. -
#end_of_day ⇒ Object
Returns a new DateTime representing the end of the day (23:59:59).
- #future? ⇒ Boolean
- #past? ⇒ Boolean
-
#seconds_since_midnight ⇒ Object
Seconds since midnight: DateTime.now.seconds_since_midnight.
-
#since(seconds) ⇒ Object
(also: #in)
Returns a new DateTime representing the time a number of seconds since the instance time Do not use this method in combination with x.months, use months_since instead!.
-
#stamp(format = :default) ⇒ Object
Convert to a formatted string.
-
#to_date ⇒ Object
Converts self to a Ruby Date object; time portion is discarded.
-
#to_datetime ⇒ Object
To be able to keep Times, Dates and DateTimes interchangeable on conversions.
-
#to_f ⇒ Object
Converts self to a floating-point number of seconds since the Unix epoch.
-
#to_time ⇒ Object
Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class.
-
#utc ⇒ Object
(also: #getutc)
Adjusts DateTime to UTC by adding its offset value; offset is set to 0.
-
#utc? ⇒ Boolean
Returns true if offset == 0.
-
#utc_offset ⇒ Object
Returns the offset value in seconds.
-
#xmlschema ⇒ Object
Converts datetime to an appropriate format for use in XML.
Class Method Details
Instance Method Details
#advance(options) ⇒ Object
Uses Date to provide precise Time calculations for years, months, and days. The options
parameter takes a hash with any of these keys: :years
, :months
, :weeks
, :days
, :hours
, :minutes
, :seconds
.
286 287 288 289 290 291 |
# File 'lib/standard/facets/date.rb', line 286 def advance() d = to_date.advance() datetime_advanced_by_date = change(:year => d.year, :month => d.month, :day => d.day) seconds_to_advance = ([:seconds] || 0) + ([:minutes] || 0) * 60 + ([:hours] || 0) * 3600 seconds_to_advance == 0 ? datetime_advanced_by_date : datetime_advanced_by_date.since(seconds_to_advance) end |
#ago(seconds) ⇒ Object
Returns a new DateTime representing the time a number of seconds ago Do not use this method in combination with x.months, use months_ago instead!
295 296 297 |
# File 'lib/standard/facets/date.rb', line 295 def ago(seconds) self.since(-seconds) end |
#beginning_of_day ⇒ Object Also known as: midnight
Returns a new DateTime representing the start of the day (0:00)
307 308 309 |
# File 'lib/standard/facets/date.rb', line 307 def beginning_of_day change(:hour => 0) end |
#change(options) ⇒ Object
Returns a new DateTime where one or more of the elements have been changed according to the options
parameter. The time options (hour, minute, sec) reset cascadingly, so if only the hour is passed, then minute and sec is set to 0. If the hour and minute is passed, then sec is set to 0.
269 270 271 272 273 274 275 276 277 278 279 280 |
# File 'lib/standard/facets/date.rb', line 269 def change() ::DateTime.civil( [:year] || self.year, [:month] || self.month, [:day] || self.day, [:hour] || self.hour, [:min] || ([:hour] ? 0 : self.min), [:sec] || (([:hour] || [:min]) ? 0 : self.sec), [:offset] || self.offset, [:start] || self.start ) end |
#end_of_day ⇒ Object
Returns a new DateTime representing the end of the day (23:59:59)
313 314 315 |
# File 'lib/standard/facets/date.rb', line 313 def end_of_day change(:hour => 23, :min => 59, :sec => 59) end |
#future? ⇒ Boolean
204 205 206 |
# File 'lib/standard/facets/date.rb', line 204 def future? self > ::DateTime.current end |
#past? ⇒ Boolean
208 209 210 |
# File 'lib/standard/facets/date.rb', line 208 def past? self < ::DateTime.current end |
#seconds_since_midnight ⇒ Object
Seconds since midnight: DateTime.now.seconds_since_midnight
260 261 262 |
# File 'lib/standard/facets/date.rb', line 260 def seconds_since_midnight self.sec + (self.min * 60) + (self.hour * 3600) end |
#since(seconds) ⇒ Object Also known as: in
Returns a new DateTime representing the time a number of seconds since the instance time Do not use this method in combination with x.months, use months_since instead!
301 302 303 |
# File 'lib/standard/facets/date.rb', line 301 def since(seconds) self + Rational(seconds.round, 86400) end |
#stamp(format = :default) ⇒ Object
Convert to a formatted string. See Time::FORMAT for predefined formats.
This method is aliased to to_s
.
datetime = DateTime.civil(2007,12,4,0,0,0,0) # Tue, 04 Dec 2007 00:00:00 +0000
datetime.stamp(:db) # => "2007-12-04 00:00:00"
datetime.stamp(:db) # => "2007-12-04 00:00:00"
datetime.stamp(:number) # => "20071204000000"
datetime.stamp(:short) # => "04 Dec 00:00"
datetime.stamp(:long) # => "December 04, 2007 00:00"
datetime.stamp(:rfc822) # => "Tue, 04 Dec 2007 00:00:00 +0000"
Adding your own datetime formats to stamp
DateTime formats are shared with Time. You can add your own to the Time::FORMAT hash. Use the format name as the hash key and a strftime string as the value. Eg.
Time::FORMAT[:month_and_year] = "%B %Y"
251 252 253 254 255 256 257 |
# File 'lib/standard/facets/date.rb', line 251 def stamp(format=:default) if formatter = ::Time::FORMAT[format] strftime(formatter) else to_s end end |
#to_date ⇒ Object
Converts self to a Ruby Date object; time portion is discarded
213 214 215 |
# File 'lib/standard/facets/date.rb', line 213 def to_date ::Date.new(year, month, day) end |
#to_datetime ⇒ Object
To be able to keep Times, Dates and DateTimes interchangeable on conversions
226 227 228 |
# File 'lib/standard/facets/date.rb', line 226 def to_datetime self end |
#to_f ⇒ Object
Converts self to a floating-point number of seconds since the Unix epoch
345 346 347 348 |
# File 'lib/standard/facets/date.rb', line 345 def to_f days_since_unix_epoch = self - ::DateTime.civil(1970) (days_since_unix_epoch * 86_400).to_f end |
#to_time ⇒ Object
Attempts to convert self to a Ruby Time object; returns self if out of range of Ruby Time class. If self has an offset other than 0, self will just be returned unaltered, since there’s no clean way to map it to a Time.
221 222 223 |
# File 'lib/standard/facets/date.rb', line 221 def to_time self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self end |
#utc ⇒ Object Also known as: getutc
324 325 326 |
# File 'lib/standard/facets/date.rb', line 324 def utc new_offset(0) end |
#utc? ⇒ Boolean
Returns true if offset == 0
330 331 332 |
# File 'lib/standard/facets/date.rb', line 330 def utc? offset == 0 end |
#utc_offset ⇒ Object
Returns the offset value in seconds
335 336 337 |
# File 'lib/standard/facets/date.rb', line 335 def utc_offset (offset * 86400).to_i end |
#xmlschema ⇒ Object
Converts datetime to an appropriate format for use in XML
340 341 342 |
# File 'lib/standard/facets/date.rb', line 340 def xmlschema strftime("%Y-%m-%dT%H:%M:%S%Z") end |