0

我在我正在使用的函数中遇到了这个条件:

<?php
$thisweek = date('W');
if ($thisweek == 0) {
  // ...
}

我没有写这个条件,当我去查找日期范围('W')http://us3.php.net/manual/en/function.date.php它给出了一个例子但没有范围如 00-52 或 01-52。

我的问题是 date('W') 是否会在满足此条件时返回零?

4

2 回答 2

1

不,它开始于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 
于 2013-01-22T17:38:29.537 回答
1

PHPdate('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 */

什么是 timelib_isoweek_from_date?嗯...查看 ext/date/lib/dow.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 */

如果您不相信我,请自己查看代码:

1)“从不”的意思是“只要 PHP 中没有错误”。

于 2013-01-22T17:49:35.353 回答