[英]How do I set first day of the week to Monday when using Week(Date) in PHP/MySQL?
我正在使用以下代碼構建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++;
}
修訂后的代碼
$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++;
}
WEEK(date[mode]);
date = a date value.
mode = An integer indicating the starting of the week.
默認的arugment是0,這是星期日,將其設置為1將是星期一,2星期二,依此類推。
week(date,1);
要使它在您的代碼中工作,您應該能夠將查詢更改為:
"SELECT Sum(Due) FROM patient_sessions WHERE Type='Session' AND Week(Date,1)=$i"
但是,我想我可以更進一步,使用GROUP BY進行一次SQL調用,然后迭代結果;
"SELECT Week(Date,1), SUM(DUE) FROM patient_sessions WHERE Type='Session' GROUP BY Week(Date,1)"
或者,您可能需要使用WEEK(日期,2),具體取決於您希望如何處理跨越年份的周數。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.