ruby-on-rails - 无法使用 Date.commercial 方法找到第 53 周的开始
问题描述
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")
?
解决方案
来自 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
, not%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"
推荐阅读
- dotnetnuke - 将 TLS 1.0 和 1.1 与 DNN 和 2sxc 一起使用
- pandas - 使用用户格式化表格导入 Excel 电子表格
- java - 构建名称的 Java 设置属性
- django - 未找到“喜欢”的反向。'like' 不是有效的视图函数或模式名称
- python - .NET Azure Function App 使用 UpsertItemAsync 上传到 CosmosDB 速度非常慢,尤其是与 Python 的 CosmosClient 相比
- nginx - 将 docker-compose 容器中的 API 调用到另一个容器
- c - 如何与 OFONO 建立 SCO 连接?
- .htaccess - 如何在 cpanel 中的密码保护区域之前重定向到 https?
- python - 如何在 Python 中用外部函数结束循环?
- loops - 如何重新启动程序(没有名称)直到退出