จะลองดูครับขอบคุณครับขอถามเพิ่มเติมอีกหน่อย ถ้าเป็นอาทิตละครับ
ลองดูตามนี้ครับ อธิบายไม่ค่อยเก่ง ไม่รู้จะเขียนงงๆ ไหม
ไล่ดีๆ code อาจจะสั้นได้กว่านี้นะครับ ผมก็ไม่ค่อยเก่งด้าน programming สักเท่าไหร่
ลองเอาไปประยุกใช้ดูครับ
<?php
$days = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday'];
$month = strtotime(date('Y-m-01')); // แปรงวันที่ 1 ของเดือนและปีปัจจุบันเป็น time
$startDayInMonth = date('l',$month); // หาว่าวันที่ 1 ของเดือนนั้นเป็นวันอะไร
$indexOfDays = array_search($startDayInMonth, $days); // หาตำแหน่ง array ของตัวแปร $days
$dateInMonth = date('t', $month); // หาจำนวนวันของเดือน
$weeksInMonth = ceil(($indexOfDays + $dateInMonth - 1) / 7); // หาจำนวนอาทิตของเดือน
$count = 0; // ประกาศเริ่มต้นเป็น 0 เพราะจะเอาไว้นับว่าตรงกับตำแหน่งวันแรกของเดือนหรือยัง จากตัวแปร $days
$date = 1; // ประกาศตัวแปรเริ่มต้น วันที่ 1
$weeks = []; // ประกาศตัวแปรเป็น array เพื่อเอาไว้เก็บวันสุดท้ายของแต่ละอาทิต
for($week = 1; $week <= $weeksInMonth; $week++) { // ลูปแรก วนลูปตามจำนวนอาทิตของเดือน
for($dateInWeek = 1; $dateInWeek <= 7; $dateInWeek++) { // ลูปสอง วนลูป 7 รอบ ต่ออาทิต ( จากลูปแรก )
if($count >= $indexOfDays && $date <= $dateInMonth) {
/* if เช็คว่าค่าของ $count มีค่ามากกว่าหรือเท่ากับ $indexOfDays (ตำแหน่ง array ของ $days ที่หาว่าวันแรกของเดือนเป็นวันอะไร) หรือยัง เพราะต้องเริ่มเพิ่มค่าเมื่อวันที่ 1 ตรงกับวันเริ่มต้นของเดือน
และค่า $date(วันที่) ต้องไม่มากกว่า $dateInMonth(จำนวนวันทั้งหมดของเดือน)
*/
$weeks[$week] = $date;
$date++;
}
$count++;
}
}
$dateNow = date('j'); // ค่าวันปัจจุบันว่าวันที่เท่าไหร่ แสดงผลเป็น 1-31
$styleWeek = ['style week 1',
'style week 2',
'style week 3',
'style week 4',
'style week 5']; // กำหนด style ของแต่ละอาทิต
foreach($weeks as $week => $endDay) {
if($dateNow <= $endDay) {
echo $styleWeek[$week-1]; // ที่ลบ 1 เพราะ $weeks ค่า array เริ่มต้นที่ 1 แต่ $styleWeek array เริ่มต้นที่ 0
}
}