想要在一年内获得最长的一周,并认为这是获得这个数字最简单的方法,但我很惊讶,一年的最后一天可能是在第一周。这是因为这些日子是在本周的上半周吗? 所以我知道如何获得正确的数字,我只是想知道逻辑。
<?php
echo (new DateTime('2016-12-31 00:00:00'))->format('W'); //52
echo (new DateTime('2017-12-31 00:00:00'))->format('W'); //52
echo (new DateTime('2018-12-31 00:00:00'))->format('W'); //01
echo (new DateTime('2018-12-30 00:00:00'))->format('W'); //52
echo (new DateTime('2019-12-31 00:00:00'))->format('W'); //01
echo (new DateTime('2019-12-30 00:00:00'))->format('W'); //01
echo (new DateTime('2019-12-29 00:00:00'))->format('W'); //52
echo (new DateTime('2020-12-31 00:00:00'))->format('W'); //53
通过回答链接(维基百科)找到:
上周
ISO周编号年的最后一周,即第52或第53周 一,是01周前的一周。本周的属性是:
今年是最后一个星期四。
这是最后一周的大部分时间(4次或更多次) 腊。
它的中间一天,星期四,在结束的一年。
最后一天是最接近12月31日的星期日。
它有12月28日。因此,最新的可能日期是28 12月至1月3日,最早的12月21日至28日。
如果12月31日是星期一,星期二或星期三,则是在01周 第二年。如果是在星期四,则是在一年中的第53周 刚结束;如果在星期五,它是在第52周(如果是一年,则为53) 结束是闰年);如果在周六或周日,则是在第52周 刚刚结束的那一年
答案 0 :(得分:3)
可能跟随the ISO week date system。引用维基百科的文章:
第01周的ISO 8601定义是其中第一个星期四的一周。
答案 1 :(得分:1)
如果你想获得一年中的最后一周,你可以使用这个简单的功能:
In [397]: a = np.array([2,3,2,1,0]) # Biasing array
In [398]: b = np.array([1,2,3,2,1])
In [399]: np.minimum(b[:,None],a)
Out[399]:
array([[1, 1, 1, 1, 0],
[2, 2, 2, 1, 0],
[2, 3, 2, 1, 0],
[2, 2, 2, 1, 0],
[1, 1, 1, 1, 0]])