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
.
287 288 289 290 291 292 |
# File 'lib/standard/facets/date.rb', line 287 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!
296 297 298 |
# File 'lib/standard/facets/date.rb', line 296 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)
308 309 310 |
# File 'lib/standard/facets/date.rb', line 308 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.
270 271 272 273 274 275 276 277 278 279 280 281 |
# File 'lib/standard/facets/date.rb', line 270 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)
314 315 316 |
# File 'lib/standard/facets/date.rb', line 314 def end_of_day change(:hour => 23, :min => 59, :sec => 59) end |
#future? ⇒ Boolean
205 206 207 |
# File 'lib/standard/facets/date.rb', line 205 def future? self > ::DateTime.current end |
#past? ⇒ Boolean
209 210 211 |
# File 'lib/standard/facets/date.rb', line 209 def past? self < ::DateTime.current end |
#seconds_since_midnight ⇒ Object
Seconds since midnight: DateTime.now.seconds_since_midnight
261 262 263 |
# File 'lib/standard/facets/date.rb', line 261 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!
302 303 304 |
# File 'lib/standard/facets/date.rb', line 302 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"
252 253 254 255 256 257 258 |
# File 'lib/standard/facets/date.rb', line 252 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
214 215 216 |
# File 'lib/standard/facets/date.rb', line 214 def to_date ::Date.new(year, month, day) end |
#to_datetime ⇒ Object
To be able to keep Times, Dates and DateTimes interchangeable on conversions
227 228 229 |
# File 'lib/standard/facets/date.rb', line 227 def to_datetime self end |
#to_f ⇒ Object
Converts self to a floating-point number of seconds since the Unix epoch
346 347 348 349 |
# File 'lib/standard/facets/date.rb', line 346 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.
222 223 224 |
# File 'lib/standard/facets/date.rb', line 222 def to_time self.offset == 0 ? ::Time.utc_time(year, month, day, hour, min, sec) : self end |
#utc ⇒ Object Also known as: getutc
325 326 327 |
# File 'lib/standard/facets/date.rb', line 325 def utc new_offset(0) end |
#utc? ⇒ Boolean
Returns true if offset == 0
331 332 333 |
# File 'lib/standard/facets/date.rb', line 331 def utc? offset == 0 end |
#utc_offset ⇒ Object
Returns the offset value in seconds
336 337 338 |
# File 'lib/standard/facets/date.rb', line 336 def utc_offset (offset * 86400).to_i end |
#xmlschema ⇒ Object
Converts datetime to an appropriate format for use in XML
341 342 343 |
# File 'lib/standard/facets/date.rb', line 341 def xmlschema strftime("%Y-%m-%dT%H:%M:%S%Z") end |