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

PHPdate('W')関数が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 に答える
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 日が週である、または 12 月 31 日が週であると想定しないでください。0152

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

出力

 01 
于 2013-01-22T17:38:29.537 に答える