在PHP/MySQL中使用Week(Date)时,如何将星期的第一天设置为星期一?

Nic*_*ick 2 php mysql date week-number

我使用以下代码构建Google Chart,以便在一年内对应于Week Numbers的MySQL表中提取所有条目.目前周数从周日开始,我想改变这一点,以便他们在星期一开始,但我不知道如何做到这一点.

$i=1;
    while($i<=53)
       {
        $week_start = new DateTime();
        $week_start->setISODate(2013,$i+1);
        $date_display = $week_start->format('j M Y');

        $sessions = $wpdb->get_var($wpdb->prepare("SELECT Sum(Due) from patient_sessions WHERE Type='Session' AND Week(Date)='$i'"));

        $temp = array();

        $temp[] = array('v' => (string) $date_display); 
        $temp[] = array('v' => (string) $sessions); 
        $rows[] = array('c' => $temp);
        $i++;
    }
Run Code Online (Sandbox Code Playgroud)

修订后的代码

$sessions = $wpdb->get_results($wpdb->prepare("SELECT Due,Date from patient_sessions WHERE Type='Session'"));
$work_times = $wpdb->get_results($wpdb->prepare("SELECT Amount,Date from work_times"));
$expenses = $wpdb->get_results($wpdb->prepare("SELECT Amount,Date from expenses WHERE Client='Psychotherapy'"));

$i=1;
while($i<=53) {
    $week_start = new DateTime();
    $week_start->setISODate(2013,$i+1);
    $date_display = $week_start->format('j M Y');

    $session_total = 0;
    $work_time_total = 0;
    $expense_total = 0;


      foreach ($sessions as $session) {
    if (date("W", strtotime($session->Date)) == $i) {
    $session_total = ($session_total+$session->Due);
    }
    }

         foreach ($work_times as $work_time) {
    if (date("W", strtotime($work_time->Date)) == $i) {
    $work_time_total = ($work_time_total+$work_time->Amount);
    }
    }

          foreach ($expenses as $expense) {
    if (date("W", strtotime($expense->Date)) == $i) {
    $expense_total = ($expense_total+$expense->Amount);
    }
          }

    $balance = ($session_total + $work_time_total - $expense_total);

    $temp = array();

    $temp[] = array('v' => (string) $date_display); 
    $temp[] = array('v' => (string) $balance); 
    $rows[] = array('c' => $temp);
    $i++;
}
Run Code Online (Sandbox Code Playgroud)

gar*_*dni 10

WEEK(date[mode]); 

date = a date value.    
mode = An integer indicating the starting of the week. 
Run Code Online (Sandbox Code Playgroud)

默认的arugment是0,这是星期日,将其设置为1将是星期一,2星期二,依此类推.

week(date,1);
Run Code Online (Sandbox Code Playgroud)

  • @gardni"将此设置为1将是星期一,2星期二"是不正确的.根据[文档](http://dev.mysql.com/doc/refman/5.5/en/date-and-time-functions.html#function_week),一周的开头是星期日或星期一,差异是一周被确定为一年的一部分.否则,好的答案. (4认同)