Mik*_*wis 5 php math week-number
根据每周每年的公式https://en.wikipedia.org/wiki/ISO_week_date,您应该能够找到每周53周的公式.我已经将公式复制到PHP中,但它似乎在2020年左右回归52周而不是53周.
function weeks($year){
$w = 52;
$p = ($year+($year/4)-($year/100)+($year/400))%7;
if ($p == 4 || ($p-1) == 3){
$w++;
}
return $w." ".$p;
}
for ($i = 2000; $i <= 2144; $i++) {
echo $i." (".weeks($i).") | ";
}
Run Code Online (Sandbox Code Playgroud)
来自维基百科
以下71年的400年周期有53周(371天); 未列出的年份有52周(364天); 当前年份增加2000:
004,009,015,020,026,032,037,043,048,054,060,065,071,076,082,088,093,099,105,111,116,122,128,133,139, 144
我知道我可以使用date()函数获取给定年份的总周数,但我只是想知道是否有人知道数学,因为维基百科上的公式似乎是错误的.
编辑工作代码
function p($year){
return ($year+floor($year/4)-floor($year/100)+floor($year/400))%7;
}
function weeks($year){
$w = 52;
if (p($year) == 4 || p($year-1) == 3){
$w++;
}
return $w; // returns the number of weeks in that year
}
for ($i = 2000; $i <= 2144; $i++) {
echo $i." (".weeks($i).") | ";
}
Run Code Online (Sandbox Code Playgroud)
我可以看到两个问题:
\n\n您错过了 公式中的向下表示法p。在 PHP 中应该是+ int($year / 4) - int($year / 100)etc,而不是+ ($year / 4) - ($year / 100)etc。
p是一个函数,整体公式使用p(year)和p(year - 1)。您$p等于p(year),但$p - 1不等于p(year - 1)(请注意,您的第二个条件($p - 1) == 3与您的第一个条件相同,$p == 4\xe2\x80\x94 这应该表明这不是预期的)。最简单的解决方法是将其也写为 PHP 中的函数。
| 归档时间: |
|
| 查看次数: |
2006 次 |
| 最近记录: |