我在一个函数中遇到了这个条件:
<?php
$thisweek = date('W');
if ($thisweek == 0) {
// ...
}
我没有写这个条件,当我去查找日期的范围('W') http://us3.php.net/manual/en/function.date.php它给出了一个例子,但没有像00-52或01-52这样的范围。
我的问题是date('W')是否会返回零满足这个条件?
PHP date('W')
函数永远不会1返回0。
在PHP源代码ext/date/php_date.c中查找。
950-1000行周围稍微格式化:
timelib_sll isoweek, isoyear;
int weekYearSet = 0;
...
/* week */
case 'W':
if(!weekYearSet) {
timelib_isoweek_from_date(t->y, t->m, t->d, &isoweek, &isoyear);
weekYearSet = 1;
}
length = slprintf(buffer, 32, "%02d", (int) isoweek); break; /* iso weeknr */
timeelib_isoweek_from_date是什么?嗯…查看ext/date/lib/down .c中的逻辑,从第82行可以得出结论,周数从1到53变化:
/* Find if Y M D falls in YearNumber Y-1, WeekNumber 52 or 53 */
...
/* 8. Find if Y M D falls in YearNumber Y+1, WeekNumber 1 */
...
/* 9. Find if Y M D falls in YearNumber Y, WeekNumber 1 through 53 */
如果你不相信我,你可以自己看看代码:
- http://git.php.net/?p=php-src.git; = blob; f = ext/日期/php_date.c
- http://git.php.net/?p=php-src.git; = blob; f = ext/日期/lib/dow.c
<一口> 1> 一口>
No。从01
开始,到52
结束。看我的测试:
echo date('W', strtotime('2013-01-01')) . PHP_EOL;
echo date('W', strtotime('2012-12-30')) . PHP_EOL;
01
52
只是不要假设1月1日将是01
周或12月31日将是52
周:
echo date('W', strtotime('2012-12-31')) . PHP_EOL;
01