Из документов API:
первая календарная неделя года включает в себя первый четверг этого года.В григорианском календаре это эквивалентно неделе, которая включает 4 января.
Таким образом, 2018 не имеет 53 недели.Последний день последней недели 2018 года:
Date.commercial(2018, 52, 7)
# => #<Date: 2018-12-30 ((2458483j,0s,0n),+0s,2299161j)>
, за которым следует первая неделя 2019 года:
Date.commercial(2019, 1, 1)
# => #<Date: 2018-12-31 ((2458484j,0s,0n),+0s,2299161j)>
Похоже, вы работаете в предположении, что 2018-12-31 в 2018. Это не, не в коммерческую дату.Если вы собираетесь использовать коммерческий год вместо календарного года, используйте %G
, а не %Y
, чтобы получить коммерческий год, и %V
для недели вместо %W
.
date2018_12_31 = Date.commercial(2019, 1, 1)
date2018_12_31.strftime("%Y %W") # WRONG
# => "2018 53"
date2018_12_31.strftime("%G %V") # CORRECT
# => "2019 01"