1

月曜日から始まる先週のデータで構成されるレポートを生成する必要があります (今日が月曜日の場合は、今日の日付とカウントのみが表示されます)。先週の月曜日から始まる先週の日付配列を取得する方法を教えてください。ありがとう。

と書きましたが、この場合、先週の開始日が 31 日の場合、翌日が 32 日になり、ありえません。

$last_week_date_start = date('Y-m-d', strtotime('last monday')) + 1;

日付の配列が必要です。ありがとう。

4

3 に答える 3

0

+1 の内側に追加

for($i=0; $i<6; $i++){
    $last_week_dates[] = date('Y-m-d', strtotime('last monday + '.$i.' day'));
}

/*
array(7) {
  [0]=>
  string(10) "2012-08-20"
  [1]=>
  string(10) "2012-08-21"
  [2]=>
  string(10) "2012-08-22"
  [3]=>
  string(10) "2012-08-23"
  [4]=>
  string(10) "2012-08-24"
  [5]=>
  string(10) "2012-08-25"
  [6]=>
  string(10) "2012-08-26"
}
*/
于 2012-08-27T10:02:56.597 に答える
0

レポート内のすべての日をループするには、次のようにします。

for ($date = strtotime('last monday'); $date < time(); $date += 24*60*60) {
  // e.g. date('Y-m-d', $date);
}

ただし、データベースからデータを取得するには、次のようにします。

SELECT   DATE(date), COUNT(*)
FROM     my_table
WHERE    DATE(date) BETWEEN CURRENT_DATE - INTERVAL WEEKDAY(CURRENT_DATE) DAY
                        AND CURRENT_DATE
GROUP BY DATE(date)
ORDER BY DATE(date)
于 2012-08-27T10:06:44.760 に答える
0

SQL を使用してすべての作業を行ってみませんか? mysql からデータを取得する場合 (質問タグが示すように)、次のようにうまく使用できます。

select date_sub(date_format(now(),'%Y-%m-%d'), interval WEEKDAY(now()) day) as date from dual;

これにより、先週の月曜日の日付が得られます。

mysql> select date_sub(date_format(now(),'%Y-%m-%d'), interval WEEKDAY(now()) day) as date from dual;
+------------+
| date       |
+------------+
| 2012-08-27 |
+------------+
1 row in set (0.00 sec)

月曜日の場合は、現在の週の情報が使用されます。ただし、ニーズに合わせて少し変更できます。

于 2012-08-27T10:13:33.087 に答える