PHP将日期函数与每周返回0


php will date function with week ever return 0?

我在一个函数中遇到了这个条件:

<?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