Carbon当月第几周问题
序
今天遇到一个问题,那就是使用 Carbon
包获取当月的第几周时不准确。
获取方式
1 | Carbon::now()->weekOfMonth |
结果
1 | 2020-11-29 周日 第5周 |
观察发现,这两个值不应该相等的。所以这里只能是查看 Carbon
里面的具体实现了。
追查源码
1 |
|
搜索 weekOfMonth
我们发现,这个函数只是简单的使用 29 / 7
然后向上取整(ceil 函数)。所以就会存在 29 / 7
和 30 / 7
向上取整的结果都是 5
的情况。
然后我们可以看见它下面还有一个类似的函数 weekNumberInMonth
。
1 |
|
然后根据这个公式计算的结果还是不符合,出现了返回 0
的情况。
在 github
上面搜到的结果是weekNumberInMonth return 0。
得到的结论就是现在这个版本 dayOfWeek
星期日-星期六采用的是 0 - 6
表示,然后想要得到正确的显示就需要使用 dayOfWeekIso
然后这个值获取的是星期一到星期日,用 1 - 7
表示。
最后这里可以更新为最新的包就解决这个问题了,其实这个也不算 bug
因为不同的规则定义就存在不同的第几周。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 梧桐树下!
评论