php将日期函数与周回归0?

时间:2013-01-22 17:36:20

标签: php date

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

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

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

我的问题是日期('W')是否会在符合条件的情况下返回零?

2 个答案:

答案 0 :(得分:1)

没有。它从01开始,到52结束。 See my test.

echo date('W', strtotime('2013-01-01')) . PHP_EOL;
echo date('W', strtotime('2012-12-30')) . PHP_EOL;

<强>输出

 01 
 52

don't assume 1月1日为01周或12月31日为52周:

echo date('W', strtotime('2012-12-31')) . PHP_EOL;

<强>输出

 01 

答案 1 :(得分:1)

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 */

什么是timelib_isoweek_from_date?那么......从第82行看ext / date / lib / dow.c中的逻辑,可以得出结论,周数从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中没有错误”。