查找一周开始(星期一)的Date.commercial方法在第53周不起作用
Date.commercial(2018, 1, 1)
#=> 2018-01-01
Date.commercial(2018, 52, 1)
#=> 2018-12-24当我试图找出53周的星期一(53周)时,它会抛出错误。
Date.commercial(2018, 53, 1)
# ArgumentError: invalid date而且,我也不清楚它的定义。就像这两个人的行为是如此不同:
Date.commercial(2015, 1, 1)
#=> 2014-12-29
Date.commercial(2016, 1, 1)
#=> 2016-01-04我认为这是因为Date.commercial()到目前为止转换周号的定义与Date.strftime("%W")不同。是否有任何方法可以将一年的周数转换为与Date.strftime("%W")一致的周的星期一日期,即Date.strftime("%W")的反向函数?
发布于 2018-06-08 08:00:36
是否有任何方法可以将一年的周数转换为与
Date.strftime("%W")一致的周的星期一日期,即Date.strftime("%W")的反向函数?
你可以用strptime
Date.strptime('2018-W53', '%Y-W%W')
#=> #<Date: 2018-12-31 ((2458484j,0s,0n),+0s,2299161j)>请注意,%W和%V (商业周刊)的定义不同,并产生不同的结果。
%W被定义为:
YYYY的第一周从星期一开始。第一周前一年的日子是在第0周。
%V被定义为:
YYYY的第一周从星期一开始,包括YYYY-01-04.第一周前一年的日子是前一年的最后一周。
下面是一些例子:
Date.new(2018, 1, 1).strftime('%Y-W%W / %G-CW%V') #=> "2018-W01 / 2018-CW01"
Date.new(2018, 12, 31).strftime('%Y-W%W / %G-CW%V') #=> "2018-W53 / 2019-CW01"
Date.new(2019, 1, 1).strftime('%Y-W%W / %G-CW%V') #=> "2019-W00 / 2019-CW01"
Date.new(2019, 12, 31).strftime('%Y-W%W / %G-CW%V') #=> "2019-W52 / 2020-CW01"
Date.new(2020, 1, 1).strftime('%Y-W%W / %G-CW%V') #=> "2020-W00 / 2020-CW01"
Date.new(2020, 12, 31).strftime('%Y-W%W / %G-CW%V') #=> "2020-W52 / 2020-CW53"
Date.new(2021, 1, 1).strftime('%Y-W%W / %G-CW%V') #=> "2021-W00 / 2020-CW53"
Date.new(2021, 12, 31).strftime('%Y-W%W / %G-CW%V') #=> "2021-W52 / 2021-CW52"发布于 2018-06-08 07:48:14
来自API文档:
一年中的第一个日历周包括该年的第一个星期四。在公历中,这相当于包括1月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"https://stackoverflow.com/questions/50755624
复制相似问题