class Date
Class Date provides methods for storing and manipulating calendar dates.
Consider using class Time instead of class Date if:
-
You need both dates and times;
Datehandles only dates. -
You need only Gregorian dates (and not Julian dates); see Julian and Gregorian Calendars.
A Date object, once created, is immutable, and cannot be modified.
Creating a Date
You can create a date for the current date, using Date.today:
Date.today # => #<Date: 1999-12-31>
You can create a specific date from various combinations of arguments:
-
Date.newtakes integer year, month, and day-of-month:Date.new(1999, 12, 31) # => #<Date: 1999-12-31>
-
Date.ordinaltakes integer year and day-of-year:Date.ordinal(1999, 365) # => #<Date: 1999-12-31>
-
Date.jdtakes integer Julian day:Date.jd(2451544) # => #<Date: 1999-12-31>
-
Date.commercialtakes integer commercial data (year, week, day-of-week):Date.commercial(1999, 52, 5) # => #<Date: 1999-12-31>
-
Date.parsetakes a string, which it parses heuristically:Date.parse('1999-12-31') # => #<Date: 1999-12-31> Date.parse('31-12-1999') # => #<Date: 1999-12-31> Date.parse('1999-365') # => #<Date: 1999-12-31> Date.parse('1999-W52-5') # => #<Date: 1999-12-31>
-
Date.strptimetakes a date string and a format string, then parses the date string according to the format string:Date.strptime('1999-12-31', '%Y-%m-%d') # => #<Date: 1999-12-31> Date.strptime('31-12-1999', '%d-%m-%Y') # => #<Date: 1999-12-31> Date.strptime('1999-365', '%Y-%j') # => #<Date: 1999-12-31> Date.strptime('1999-W52-5', '%G-W%V-%u') # => #<Date: 1999-12-31> Date.strptime('1999 52 5', '%Y %U %w') # => #<Date: 1999-12-31> Date.strptime('1999 52 5', '%Y %W %u') # => #<Date: 1999-12-31> Date.strptime('fri31dec99', '%a%d%b%y') # => #<Date: 1999-12-31>
See also the specialized methods in “Specialized Format Strings” in Formats for Dates and Times
Argument limit
Certain singleton methods in Date that parse string arguments also take optional keyword argument limit, which can limit the length of the string argument.
When limit is:
-
Non-negative: raises
ArgumentErrorif the string length is greater than limit. -
Other numeric or
nil: ignoreslimit. -
Other non-numeric: raises
TypeError.
Public Class Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 113
def self._httpdate: (String str) -> Hash[Symbol, Integer]
Returns a hash of values parsed from string, which should be a valid HTTP date format:
d = Date.new(2001, 2, 3) s = d.httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT" Date._httpdate(s) # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"GMT", :offset=>0}
Related: Date.httpdate (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 132
def self._iso8601: (String str) -> Hash[Symbol, Integer]
Returns a hash of values parsed from string, which should contain an [ISO 8601 formatted date](language/strftime_formatting.rdoc@ISO+8601+Format+Specification s):
d = Date.new(2001, 2, 3) s = d.iso8601 # => "2001-02-03" Date._iso8601(s) # => {:mday=>3, :year=>2001, :mon=>2}
See argument limit.
Related: Date.iso8601 (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 150
def self._jisx0301: (String str) -> Hash[Symbol, Integer]
Returns a hash of values parsed from string, which should be a valid JIS X 0301 date format:
d = Date.new(2001, 2, 3) s = d.jisx0301 # => "H13.02.03" Date._jisx0301(s) # => {:year=>2001, :mon=>2, :mday=>3}
See argument limit.
Related: Date.jisx0301 (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 178
def self._parse: (String str, ?boolish complete) -> Hash[Symbol, Integer]
Note: This method recognizes many forms in string, but it is not a validator. For formats, see “Specialized Format Strings” in Formats for Dates and Times
If string does not specify a valid date, the result is unpredictable; consider using Date._strptime instead.
Returns a hash of values parsed from string:
Date._parse('2001-02-03') # => {:year=>2001, :mon=>2, :mday=>3}
If comp is true and the given year is in the range (0..99), the current century is supplied; otherwise, the year is taken as given:
Date._parse('01-02-03', true) # => {:year=>2001, :mon=>2, :mday=>3} Date._parse('01-02-03', false) # => {:year=>1, :mon=>2, :mday=>3}
See argument limit.
Related: Date.parse(returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 196
def self._rfc2822: (String str) -> Hash[Symbol, Integer | String]
Returns a hash of values parsed from string, which should be a valid RFC 2822 date format:
d = Date.new(2001, 2, 3) s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000" Date._rfc2822(s) # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}
See argument limit.
Related: Date.rfc2822 (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 214
def self._rfc3339: (String str) -> Hash[Symbol, Integer | String]
Returns a hash of values parsed from string, which should be a valid RFC 3339 format:
d = Date.new(2001, 2, 3) s = d.rfc3339 # => "2001-02-03T00:00:00+00:00" Date._rfc3339(s) # => {:year=>2001, :mon=>2, :mday=>3, :hour=>0, :min=>0, :sec=>0, :zone=>"+00:00", :offset=>0}
See argument limit.
Related: Date.rfc3339 (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 232
def self._rfc822: (String str) -> Hash[Symbol, Integer | String]
Returns a hash of values parsed from string, which should be a valid RFC 2822 date format:
d = Date.new(2001, 2, 3) s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000" Date._rfc2822(s) # => {:wday=>6, :mday=>3, :mon=>2, :year=>2001, :hour=>0, :min=>0, :sec=>0, :zone=>"+0000", :offset=>0}
See argument limit.
Related: Date.rfc2822 (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 250
def self._strptime: (String str, ?String format) -> Hash[Symbol, Integer]
Returns a hash of values parsed from string according to the given format:
Date._strptime('2001-02-03', '%Y-%m-%d') # => {:year=>2001, :mon=>2, :mday=>3}
For other formats, see Formats for Dates and Times. (Unlike Date.strftime, does not support flags and width.)
See also strptime(3).
Related: Date.strptime (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 267
def self._xmlschema: (String str) -> Hash[Symbol, Integer]
Returns a hash of values parsed from string, which should be a valid XML date format:
d = Date.new(2001, 2, 3) s = d.xmlschema # => "2001-02-03" Date._xmlschema(s) # => {:year=>2001, :mon=>2, :mday=>3}
See argument limit.
Related: Date.xmlschema (returns a Date object).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 275
def self.civil: (?Integer year, ?Integer month, ?Integer mday, ?Integer start) -> Date
Same as Date.new.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 319
def self.commercial: (?Integer cwyear, ?Integer cweek, ?Integer cwday, ?Integer start) -> Date
Returns a new Date object constructed from the arguments.
Argument cwyear gives the year, and should be an integer.
Argument cweek gives the index of the week within the year, and should be in range (1..53) or (-53..-1); in some years, 53 or -53 will be out-of-range; if negative, counts backward from the end of the year:
Date.commercial(2022, 1, 1).to_s # => "2022-01-03" Date.commercial(2022, 52, 1).to_s # => "2022-12-26"
Argument cwday gives the indes of the weekday within the week, and should be in range (1..7) or (-7..-1); 1 or -7 is Monday; if negative, counts backward from the end of the week:
Date.commercial(2022, 1, 1).to_s # => "2022-01-03" Date.commercial(2022, 1, -7).to_s # => "2022-01-03"
When cweek is 1:
-
If January 1 is a Friday, Saturday, or Sunday, the first week begins in the week after:
Date::ABBR_DAYNAMES[Date.new(2023, 1, 1).wday] # => "Sun" Date.commercial(2023, 1, 1).to_s # => "2023-01-02" Date.commercial(2023, 1, 7).to_s # => "2023-01-08"
-
Otherwise, the first week is the week of January 1, which may mean some of the days fall on the year before:
Date::ABBR_DAYNAMES[Date.new(2020, 1, 1).wday] # => "Wed" Date.commercial(2020, 1, 1).to_s # => "2019-12-30" Date.commercial(2020, 1, 7).to_s # => "2020-01-05"
See argument start.
Related: Date.jd, Date.new, Date.ordinal.
(Integer year) → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 334
def self.gregorian_leap?: (Integer year) -> bool
Returns true if the given year is a leap year in the proleptic Gregorian calendar, false otherwise:
Date.gregorian_leap?(2000) # => true Date.gregorian_leap?(2001) # => false
Related: Date.julian_leap?.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 355
def self.httpdate: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid HTTP date format:
d = Date.new(2001, 2, 3) s = d.httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT" Date.httpdate(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._httpdate (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 377
def self.iso8601: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should contain an [ISO 8601 formatted date](language/strftime_formatting.rdoc@ISO+8601+Format+Specification s):
d = Date.new(2001, 2, 3) s = d.iso8601 # => "2001-02-03" Date.iso8601(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._iso8601 (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 405
def self.jd: (Integer jd, ?Integer start) -> Date
Returns a new Date object formed from the arguments:
Date.jd(2451944).to_s # => "2001-02-03" Date.jd(2451945).to_s # => "2001-02-04" Date.jd(0).to_s # => "-4712-01-01"
The returned date is:
-
Gregorian, if the argument is greater than or equal to
start:Date::ITALY # => 2299161 Date.jd(Date::ITALY).gregorian? # => true Date.jd(Date::ITALY + 1).gregorian? # => true
-
Julian, otherwise
Date.jd(Date::ITALY - 1).julian? # => true
See argument start.
Related: Date.new.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 430
def self.jisx0301: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid JIS X 0301 format:
d = Date.new(2001, 2, 3) s = d.jisx0301 # => "H13.02.03" Date.jisx0301(s) # => #<Date: 2001-02-03>
For no-era year, legacy format, Heisei is assumed.
Date.jisx0301('13.02.03') # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._jisx0301 (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/json-2.21.0/lib/json/add/date.rb, line 10 def self.json_create(object) civil(*object.values_at('y', 'm', 'd', 'sg')) end
(Integer year) → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 445
def self.julian_leap?: (Integer year) -> bool
Returns true if the given year is a leap year in the proleptic Julian calendar, false otherwise:
Date.julian_leap?(1900) # => true Date.julian_leap?(1901) # => false
Related: Date.gregorian_leap?.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 460
def self.leap?: (Integer year) -> bool
Returns true if the given year is a leap year in the proleptic Gregorian calendar, false otherwise:
Date.gregorian_leap?(2000) # => true Date.gregorian_leap?(2001) # => false
Related: Date.julian_leap?.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 95
def initialize: (?Integer year, ?Integer month, ?Integer mday, ?Integer start) -> void
Returns a new Date object constructed from the given arguments:
Date.new(2022).to_s # => "2022-01-01" Date.new(2022, 2).to_s # => "2022-02-01" Date.new(2022, 2, 4).to_s # => "2022-02-04"
Argument month should be in range (1..12) or range (-12..-1); when the argument is negative, counts backward from the end of the year:
Date.new(2022, -11, 4).to_s # => "2022-02-04"
Argument mday should be in range (1..n) or range (-n..-1) where n is the number of days in the month; when the argument is negative, counts backward from the end of the month.
See argument start.
Related: Date.jd.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 492
def self.ordinal: (?Integer year, ?Integer yday, ?Integer start) -> Date
Returns a new Date object formed fom the arguments.
With no arguments, returns the date for January 1, -4712:
Date.ordinal.to_s # => "-4712-01-01"
With argument year, returns the date for January 1 of that year:
Date.ordinal(2001).to_s # => "2001-01-01" Date.ordinal(-2001).to_s # => "-2001-01-01"
With positive argument yday == n, returns the date for the nth day of the given year:
Date.ordinal(2001, 14).to_s # => "2001-01-14"
With negative argument yday, counts backward from the end of the year:
Date.ordinal(2001, -14).to_s # => "2001-12-18"
Raises an exception if yday is zero or out of range.
See argument start.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 524
def self.parse: (?String str, ?boolish complete, ?Integer start) -> Date
Note: This method recognizes many forms in string, but it is not a validator. For formats, see “Specialized Format Strings” in Formats for Dates and Times If string does not specify a valid date, the result is unpredictable; consider using Date._strptime instead.
Returns a new Date object with values parsed from string:
Date.parse('2001-02-03') # => #<Date: 2001-02-03> Date.parse('20010203') # => #<Date: 2001-02-03> Date.parse('3rd Feb 2001') # => #<Date: 2001-02-03>
If comp is true and the given year is in the range (0..99), the current century is supplied; otherwise, the year is taken as given:
Date.parse('01-02-03', true) # => #<Date: 2001-02-03> Date.parse('01-02-03', false) # => #<Date: 0001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._parse (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 545
def self.rfc2822: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid RFC 2822 date format:
d = Date.new(2001, 2, 3) s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000" Date.rfc2822(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._rfc2822 (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 566
def self.rfc3339: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid RFC 3339 format:
d = Date.new(2001, 2, 3) s = d.rfc3339 # => "2001-02-03T00:00:00+00:00" Date.rfc3339(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._rfc3339 (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 587
def self.rfc822: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid RFC 2822 date format:
d = Date.new(2001, 2, 3) s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000" Date.rfc2822(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._rfc2822 (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 614
def self.strptime: (String str, ?String format, ?Integer start) -> Date
Returns a new Date object with values parsed from string, according to the given format:
Date.strptime('2001-02-03', '%Y-%m-%d') # => #<Date: 2001-02-03> Date.strptime('03-02-2001', '%d-%m-%Y') # => #<Date: 2001-02-03> Date.strptime('2001-034', '%Y-%j') # => #<Date: 2001-02-03> Date.strptime('2001-W05-6', '%G-W%V-%u') # => #<Date: 2001-02-03> Date.strptime('2001 04 6', '%Y %U %w') # => #<Date: 2001-02-03> Date.strptime('2001 05 6', '%Y %W %u') # => #<Date: 2001-02-03> Date.strptime('sat3feb01', '%a%d%b%y') # => #<Date: 2001-02-03>
For other formats, see Formats for Dates and Times. (Unlike Date.strftime, does not support flags and width.)
See argument start.
See also strptime(3).
Related: Date._strptime (returns a hash).
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 626
def self.today: (?Integer start) -> Date
Returns a new Date object constructed from the present date:
Date.today.to_s # => "2022-07-06"
See argument start.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 643
def self.valid_civil?: (Integer year, Integer month, Integer mday, ?Integer start) -> bool
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 661
def self.valid_commercial?: (Integer cwyear, Integer cweek, Integer cwday, ?Integer start) -> bool
Returns true if the arguments define a valid commercial date, false otherwise:
Date.valid_commercial?(2001, 5, 6) # => true Date.valid_commercial?(2001, 5, 8) # => false
See Date.commercial.
See argument start.
Related: Date.jd, Date.commercial.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 678
def self.valid_date?: (Integer year, Integer month, Integer mday, ?Integer start) -> bool
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 693
def self.valid_jd?: (Integer jd, ?Integer start) -> bool
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 709
def self.valid_ordinal?: (Integer year, Integer yday, ?Integer start) -> bool
Returns true if the arguments define a valid ordinal date, false otherwise:
Date.valid_ordinal?(2001, 34) # => true Date.valid_ordinal?(2001, 366) # => false
See argument start.
Related: Date.jd, Date.ordinal.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 729
def self.xmlschema: (String str, ?Integer start) -> Date
Returns a new Date object with values parsed from string, which should be a valid XML date format:
d = Date.new(2001, 2, 3) s = d.xmlschema # => "2001-02-03" Date.xmlschema(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._xmlschema (returns a hash).
Public Instance Methods
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 747
def +: (Numeric & _ToR other) -> Date
Returns a date object pointing other days after self. The other should be a numeric value. If the other is a fractional number, assumes its precision is at most nanosecond.
Date.new(2001,2,3) + 1 #=> #<Date: 2001-02-04 ...> DateTime.new(2001,2,3) + Rational(1,2) #=> #<DateTime: 2001-02-03T12:00:00+00:00 ...> DateTime.new(2001,2,3) + Rational(-1,2) #=> #<DateTime: 2001-02-02T12:00:00+00:00 ...> DateTime.jd(0,12) + DateTime.new(2001,2,3).ajd #=> #<DateTime: 2001-02-03T00:00:00+00:00 ...>
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 766
def -: (Numeric & _ToR other) -> Date
| (Date other) -> Rational
If the other is a date object, returns a Rational whose value is the difference between the two dates in days. If the other is a numeric value, returns a date object pointing other days before self. If the other is a fractional number, assumes its precision is at most nanosecond.
Date.new(2001,2,3) - 1 #=> #<Date: 2001-02-02 ...> DateTime.new(2001,2,3) - Rational(1,2) #=> #<DateTime: 2001-02-02T12:00:00+00:00 ...> Date.new(2001,2,3) - Date.new(2001) #=> (33/1) DateTime.new(2001,2,3) - DateTime.new(2001,2,2,12) #=> (1/2)
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 795
def <<: (Integer month) -> Date
Returns a new Date object representing the date n months earlier; n should be a numeric:
(Date.new(2001, 2, 3) << 1).to_s # => "2001-01-03" (Date.new(2001, 2, 3) << -2).to_s # => "2001-04-03"
When the same day does not exist for the new month, the last day of that month is used instead:
(Date.new(2001, 3, 31) << 1).to_s # => "2001-02-28" (Date.new(2001, 3, 31) << -6).to_s # => "2001-09-30"
This results in the following, possibly unexpected, behaviors:
d0 = Date.new(2001, 3, 31) d0 << 2 # => #<Date: 2001-01-31> d0 << 1 << 1 # => #<Date: 2001-01-28> d0 = Date.new(2001, 3, 31) d1 = d0 << 1 # => #<Date: 2001-02-28> d2 = d1 << -1 # => #<Date: 2001-03-28>
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 836
def <=>: (untyped other) -> Integer?
Compares self and other, returning:
-
-1ifotheris larger. -
0if the two are equal. -
1ifotheris smaller. -
nilif the two are incomparable.
Argument other may be:
-
Another
Dateobject:d = Date.new(2022, 7, 27) # => #<Date: 2022-07-27 ((2459788j,0s,0n),+0s,2299161j)> prev_date = d.prev_day # => #<Date: 2022-07-26 ((2459787j,0s,0n),+0s,2299161j)> next_date = d.next_day # => #<Date: 2022-07-28 ((2459789j,0s,0n),+0s,2299161j)> d <=> next_date # => -1 d <=> d # => 0 d <=> prev_date # => 1
-
A
DateTimeobject:d <=> DateTime.new(2022, 7, 26) # => 1 d <=> DateTime.new(2022, 7, 27) # => 0 d <=> DateTime.new(2022, 7, 28) # => -1
-
A numeric (compares
self.ajdtoother):d <=> 2459788 # => -1 d <=> 2459787 # => 1 d <=> 2459786 # => 1 d <=> d.ajd # => 0
-
Any other object:
d <=> Object.new # => nil
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 873
def ===: (Date other) -> bool
Returns true if self and other represent the same date, false if not, nil if the two are not comparable.
Argument other may be:
-
Another
Dateobject:d = Date.new(2022, 7, 27) # => #<Date: 2022-07-27 ((2459788j,0s,0n),+0s,2299161j)> prev_date = d.prev_day # => #<Date: 2022-07-26 ((2459787j,0s,0n),+0s,2299161j)> next_date = d.next_day # => #<Date: 2022-07-28 ((2459789j,0s,0n),+0s,2299161j)> d === prev_date # => false d === d # => true d === next_date # => false
-
A
DateTimeobject:d === DateTime.new(2022, 7, 26) # => false d === DateTime.new(2022, 7, 27) # => true d === DateTime.new(2022, 7, 28) # => false
-
A numeric (compares
self.jdtoother):d === 2459788 # => true d === 2459787 # => false d === 2459786 # => false d === d.jd # => true
-
An object not comparable:
d === Object.new # => nil
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 901
def >>: (Integer month) -> Date
Returns a new Date object representing the date n months later; n should be a numeric:
(Date.new(2001, 2, 3) >> 1).to_s # => "2001-03-03" (Date.new(2001, 2, 3) >> -2).to_s # => "2000-12-03"
When the same day does not exist for the new month, the last day of that month is used instead:
(Date.new(2001, 1, 31) >> 1).to_s # => "2001-02-28" (Date.new(2001, 1, 31) >> -4).to_s # => "2000-09-30"
This results in the following, possibly unexpected, behaviors:
d0 = Date.new(2001, 1, 31) d1 = d0 >> 1 # => #<Date: 2001-02-28> d2 = d1 >> 1 # => #<Date: 2001-03-28> d0 = Date.new(2001, 1, 31) d1 = d0 >> 1 # => #<Date: 2001-02-28> d2 = d1 >> -1 # => #<Date: 2001-01-28>
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 913
def ajd: () -> Rational
Returns the astronomical Julian day number. This is a fractional number, which is not adjusted by the offset.
DateTime.new(2001,2,3,4,5,6,'+7').ajd #=> (11769328217/4800) DateTime.new(2001,2,2,14,5,6,'-7').ajd #=> (11769328217/4800)
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 925
def amjd: () -> Rational
Returns the astronomical modified Julian day number. This is a fractional number, which is not adjusted by the offset.
DateTime.new(2001,2,3,4,5,6,'+7').amjd #=> (249325817/4800) DateTime.new(2001,2,2,14,5,6,'-7').amjd #=> (249325817/4800)
# File vendor/bundle/ruby/4.0.0/gems/json-2.21.0/lib/json/add/date.rb, line 32 def as_json(*) { JSON.create_id => self.class.name, 'y' => year, 'm' => month, 'd' => day, 'sg' => start, } end
Methods Date#as_json and Date.json_create may be used to serialize and deserialize a Date object; see Marshal.
Method Date#as_json serializes self, returning a 2-element hash representing self:
require 'json/add/date' x = Date.today.as_json # => {"json_class"=>"Date", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
Method JSON.create deserializes such a hash, returning a Date object:
Date.json_create(x) # => #<Date: 2023-11-21 ((2460270j,0s,0n),+0s,2299161j)>
Methods Date#as_json and Date.json_create may be used to serialize and deserialize a Date object; see Marshal.
Method Date#as_json serializes self, returning a 2-element hash representing self:
require 'json/add/date' x = Date.today.as_json # => {"json_class"=>"Date", "y"=>2023, "m"=>11, "d"=>21, "sg"=>2299161.0}
Method JSON.create deserializes such a hash, returning a Date object:
Date.json_create(x) # => #<Date: 2023-11-21 ((2460270j,0s,0n),+0s,2299161j)>
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 940
def asctime: () -> String
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 952
def ctime: () -> String
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 963
def cwday: () -> Integer
Returns the commercial-date weekday index for self (see Date.commercial); 1 is Monday:
Date.new(2001, 2, 3).cwday # => 6
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 973
def cweek: () -> Integer
Returns commercial-date week index for self (see Date.commercial):
Date.new(2001, 2, 3).cweek # => 5
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 984
def cwyear: () -> Integer
Returns commercial-date year for self (see Date.commercial):
Date.new(2001, 2, 3).cwyear # => 2001 Date.new(2000, 1, 1).cwyear # => 1999
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 991
def day: () -> Integer
Returns the day of the month in range (1..31):
Date.new(2001, 2, 3).mday # => 3
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1026
def deconstruct_keys: (Array[Symbol]?) -> Hash[Symbol, Integer]
Returns a hash of the name/value pairs, to use in pattern matching. Possible keys are: :year, :month, :day, :wday, :yday.
Possible usages:
d = Date.new(2022, 10, 5) if d in wday: 3, day: ..7 # uses deconstruct_keys underneath puts "first Wednesday of the month" end #=> prints "first Wednesday of the month" case d in year: ...2022 puts "too old" in month: ..9 puts "quarter 1-3" in wday: 1..5, month: puts "working day in month #{month}" end #=> prints "working day in month 10"
Note that deconstruction by pattern can also be combined with class check:
if d in Date(wday: 3, day: ..7) puts "first Wednesday of the month" end
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1034
def downto: (Date min) { (Date) -> untyped } -> Date
| (Date min) -> Enumerator[Date, Date]
Equivalent to step with arguments min and -1.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1043
def england: () -> Date
Equivalent to Date#new_start with argument Date::ENGLAND.
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1051
def friday?: () -> bool
Returns true if self is a Friday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1059
def gregorian: () -> Date
Equivalent to Date#new_start with argument Date::GREGORIAN.
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1071
def gregorian?: () -> bool
Returns true if the date is on or after the date of calendar reform, false otherwise:
Date.new(1582, 10, 15).gregorian? # => true (Date.new(1582, 10, 15) - 1).gregorian? # => false
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1082
def httpdate: () -> String
Equivalent to strftime with argument '%a, %d %b %Y %T GMT'; see Formats for Dates and Times:
Date.new(2001, 2, 3).httpdate # => "Sat, 03 Feb 2001 00:00:00 GMT"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1093
def inspect: () -> String
Returns a string representation of self:
Date.new(2001, 2, 3).inspect # => "#<Date: 2001-02-03 ((2451944j,0s,0n),+0s,2299161j)>"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1106
def iso8601: () -> String
Equivalent to strftime with argument '%Y-%m-%d' (or its [shorthand form](language/strftime_formatting.rdoc@Shorthand+Conversion+Specifie rs) '%F');
Date.new(2001, 2, 3).iso8601 # => "2001-02-03"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1114
def italy: () -> Date
Equivalent to Date#new_start with argument Date::ITALY.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1126
def jd: () -> Integer
Returns the Julian day number. This is a whole number, which is adjusted by the offset as the local time.
DateTime.new(2001,2,3,4,5,6,'+7').jd #=> 2451944 DateTime.new(2001,2,3,4,5,6,'-7').jd #=> 2451944
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1136
def jisx0301: () -> String
Returns a string representation of the date in self in JIS X 0301 format.
Date.new(2001, 2, 3).jisx0301 # => "H13.02.03"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1144
def julian: () -> Date
Equivalent to Date#new_start with argument Date::JULIAN.
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1156
def julian?: () -> bool
Returns true if the date is before the date of calendar reform, false otherwise:
(Date.new(1582, 10, 15) - 1).julian? # => true Date.new(1582, 10, 15).julian? # => false
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1168
def ld: () -> Integer
Returns the Lilian day number, which is the number of days since the beginning of the Gregorian calendar, October 15, 1582.
Date.new(2001, 2, 3).ld # => 152784
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1179
def leap?: () -> bool
Returns true if the year is a leap year, false otherwise:
Date.new(2000).leap? # => true Date.new(2001).leap? # => false
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1189
def mday: () -> Integer
Returns the day of the month in range (1..31):
Date.new(2001, 2, 3).mday # => 3
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1201
def mjd: () -> Integer
Returns the modified Julian day number. This is a whole number, which is adjusted by the offset as the local time.
DateTime.new(2001,2,3,4,5,6,'+7').mjd #=> 51943 DateTime.new(2001,2,3,4,5,6,'-7').mjd #=> 51943
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1211
def mon: () -> Integer
Returns the month in range (1..12):
Date.new(2001, 2, 3).mon # => 2
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1219
def monday?: () -> bool
Returns true if self is a Monday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1226
def month: () -> Integer
Returns the month in range (1..12):
Date.new(2001, 2, 3).mon # => 2
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1241
def new_start: (?Integer start) -> Date
Returns a copy of self with the given start value:
d0 = Date.new(2000, 2, 3) d0.julian? # => false d1 = d0.new_start(Date::JULIAN) d1.julian? # => true
See argument start.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1253
def next: () -> Date
Returns a new Date object representing the following day:
d = Date.new(2001, 2, 3) d.to_s # => "2001-02-03" d.next.to_s # => "2001-02-04"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1261
def next_day: (?Integer day) -> Date
Equivalent to Date#+ with argument n.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1269
def next_month: (?Integer month) -> Date
Equivalent to >> with argument n.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1277
def next_year: (?Integer year) -> Date
Equivalent to >> with argument n * 12.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1285
def prev_day: (?Integer day) -> Date
Equivalent to Date#- with argument n.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1293
def prev_month: (?Integer month) -> Date
Equivalent to << with argument n.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1301
def prev_year: (?Integer year) -> Date
Equivalent to << with argument n * 12.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1312
def rfc2822: () -> String
Equivalent to strftime with argument '%a, %-d %b %Y %T %z'; see Formats for Dates and Times:
Date.new(2001, 2, 3).rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1323
def rfc3339: () -> String
Equivalent to strftime with argument '%FT%T%:z'; see Formats for Dates and Times:
Date.new(2001, 2, 3).rfc3339 # => "2001-02-03T00:00:00+00:00"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1341
def rfc822: () -> String
Returns a new Date object with values parsed from string, which should be a valid RFC 2822 date format:
d = Date.new(2001, 2, 3) s = d.rfc2822 # => "Sat, 3 Feb 2001 00:00:00 +0000" Date.rfc2822(s) # => #<Date: 2001-02-03>
See:
-
Argument start.
-
Argument limit.
Related: Date._rfc2822 (returns a hash).
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1349
def saturday?: () -> bool
Returns true if self is a Saturday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1371
def start: () -> Float
Returns the Julian start date for calendar reform; if not an infinity, the returned value is suitable for passing to Date#jd:
d = Date.new(2001, 2, 3, Date::ITALY) s = d.start # => 2299161.0 Date.jd(s).to_s # => "1582-10-15" d = Date.new(2001, 2, 3, Date::ENGLAND) s = d.start # => 2361222.0 Date.jd(s).to_s # => "1752-09-14" Date.new(2001, 2, 3, Date::GREGORIAN).start # => -Infinity Date.new(2001, 2, 3, Date::JULIAN).start # => Infinity
See argument start.
(Date limit, ?Integer step) { (Date) → untyped } → Date
(Date limit, ?Integer step) → ::Enumerator[Date, Date]
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1402
def step: (Date limit, ?Integer step) { (Date) -> untyped } -> Date
| (Date limit, ?Integer step) -> ::Enumerator[Date, Date]
Calls the block with specified dates; returns self.
-
The first
dateisself. -
Each successive
dateisdate + step, wherestepis the numeric step size in days. -
The last date is the last one that is before or equal to
limit, which should be aDateobject.
Example:
limit = Date.new(2001, 12, 31) Date.new(2001).step(limit){|date| p date.to_s if date.mday == 31 }
Output:
"2001-01-31" "2001-03-31" "2001-05-31" "2001-07-31" "2001-08-31" "2001-10-31" "2001-12-31"
Returns an Enumerator if no block is given.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1417
def strftime: (?String format) -> String
Returns a string representation of the date in self, formatted according the given format:
Date.new(2001, 2, 3).strftime # => "2001-02-03"
For other formats, see Formats for Dates and Times.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1426
def succ: () -> Date
Returns a new Date object representing the following day:
d = Date.new(2001, 2, 3) d.to_s # => "2001-02-03" d.next.to_s # => "2001-02-04"
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1434
def sunday?: () -> bool
Returns true if self is a Sunday, false otherwise.
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1442
def thursday?: () -> bool
Returns true if self is a Thursday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1450
def to_date: () -> Date
Returns self.
() → DateTime
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1460
def to_datetime: () -> DateTime
Returns a DateTime whose value is the same as self:
Date.new(2001, 2, 3).to_datetime # => #<DateTime: 2001-02-03T00:00:00+00:00>
(?JSON::State? state) → String
Source
# File vendor/bundle/ruby/4.0.0/gems/json-2.21.0/lib/json/add/date.rb, line 51 def to_json(*args) as_json.to_json(*args) end
Returns a JSON string representing self:
require 'json/add/date' puts Date.today.to_json
Output:
{"json_class":"Date","y":2023,"m":11,"d":21,"sg":2299161.0}
Returns a JSON string representing self:
require 'json/add/date' puts Date.today.to_json
Output:
{"json_class":"Date","y":2023,"m":11,"d":21,"sg":2299161.0}
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1473
def to_s: () -> String
Returns a string representation of the date in self in [ISO 8601 extended date format](language/strftime_formatting.rdoc@ISO+8601+Format+Specificati ons) ('%Y-%m-%d'):
Date.new(2001, 2, 3).to_s # => "2001-02-03"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1485
def to_time: () -> Time
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1493
def tuesday?: () -> bool
Returns true if self is a Tuesday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1501
def upto: (Date max) { (Date) -> untyped } -> Date
| (Date max) -> ::Enumerator[Date, Date]
Equivalent to step with arguments max and 1.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1512
def wday: () -> Integer
Returns the day of week in range (0..6); Sunday is 0:
Date.new(2001, 2, 3).wday # => 6
() → bool
Source
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1520
def wednesday?: () -> bool
Returns true if self is a Wednesday, false otherwise.
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1530
def xmlschema: () -> String
Equivalent to strftime with argument '%Y-%m-%d' (or its [shorthand form](language/strftime_formatting.rdoc@Shorthand+Conversion+Specifie rs) '%F');
Date.new(2001, 2, 3).iso8601 # => "2001-02-03"
# File vendor/bundle/ruby/4.0.0/gems/rbs-4.0.3/stdlib/date/0/date.rbs, line 1540
def yday: () -> Integer
Returns the day of the year, in range (1..366):
Date.new(2001, 2, 3).yday # => 34