Skip to content
class method

Date.commercial

(?::Integer cwyear, ?::Integer cweek, ?::Integer cwday, ?::Integer start) -> ::Date
Date.commercial(cwyear = -4712, cweek = 1, cwday = 1, start = Date::ITALY) → 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:

Example
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:

Example
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:

    Example
    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:

    Example
    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.

See also .civil .gregorian_leap? ._httpdate also in 4.1 · 3.4 · 3.3 · 3.2 · 3.1 · 3.0