อยากทราบในช่วงวันที่กำหนดมีวันอาทิตย์มีกี่วัน จะหาจำนวนทั้งหมดของวันอาทิตย์ครับว่ามีทั้งหมดกี่วันในช่วงเวลานึงอย่างเช่น 01/08/2009-20/08/2009
ไม่รู้ถูกป่าวลองพยายามหา bug ดูครับ แป่ววว
<?php
function calSunday($d1,$d2){
$d1 = strtotime($d1);
$d2 = strtotime($d2);
if ($d1 > $d2){
$temp = $d1;
$d1 = $d2;
$d2 = $temp;
}
$day = 0;
$day_sec = 24*60*60;
while(date('w', $d1) != 0 && $d1 < $d2){
$d1 += $day_sec;
$day++;
}
$remain_day = ($d2 - $d1) / $day_sec;
if ($d1 == $d2){
if (date('w',$d1) == 0){
$sunday = 1;
}else{
$sunday = 0;
}
}else{
$sunday = (($remain_day - ($remain_day % 7)) / 7) + 1;
}
return $sunday;
}
echo calSunday('2009-08-01', '2009-08-20');
$day_sec = 24*60*60;
$start = strtotime('2009-08-03');
for($i = $start; $i <= strtotime('2009-08-20'); $i += $day_sec){
echo '<br>', date('D:Y-m-d', $start), ' to ', date('D:Y-m-d', $i);
echo ' = ', calSunday(date('Y-m-d', $start), date('Y-m-d', $i));
}
?>
http://cakephp.jitwitya.com/post/calculate-sunday-amount
Date :
2009-09-13 17:27:32
By :
num
ซับซ้อนพอสมควร แต่พอจะได้แนวคิดแล้ว ขอบคุณคุณ num มากๆ เลยครับ
Date :
2009-09-13 19:05:14
By :
hamzter
ผมเคยใช้แต่ mktime อะครับ
Date :
2009-09-14 11:56:06
By :
ohmakung
ทำไมต้อง ($remain_day % 7) หารเอาเศษมาทำไมอะครับ
$sunday = (($remain_day - ($remain_day % 7)) / 7) + 1; <<< บรรทัดนี้ไม่เข้าใจเท่าไหร่ครับ
Date :
2009-09-16 04:51:32
By :
hamzter
Date :
2009-09-16 08:18:43
By :
nilas
เพื่อให้หารจำนวนวันลงตัว ไม่เป็นเลขที่มีทศนิยมครับ
อย่างเช่น remain_day = 50
ก็ remain_day % 7 จะเท่ากับ 1
sunday = (50 - 1) / 7
sunday = 7 ก็คือมีวันอาทิตย์ 7 วันครับ
Date :
2009-09-16 09:41:23
By :
num
ขอบคุณครับ แล้ว +1 ข้างหลังมีไว้ทำไมครับ
Date :
2009-09-16 12:30:53
By :
hamzter
if ($d1 == $d2){ //กรณีนี้ค้นหาวันอาทิตย์วันแรกเจอแล้ว หรือ วันเริ่มต้นและวันสิ้นสุดเป็นวันเดียวกัน
if (date('w',$d1) == 0){
$sunday = 1;
}else{
$sunday = 0;
}
}else{ //กรณีนี้ค้นหาวันอาทิตย์วันแรกเจอแล้วให้เริ่มต้นมีวันอาทิตย์ 1 ไว้ก่อน จากนั้นเอาระยะห่างระหว่างวันจันทร์ถัดจากวันอาทิตย์แรกจนถึงวันสิ้นสุดมาคำนวณหาจำนวนวันอาทิตย์ในช่วงนั้น แล้วก็ค่อยเอามาบวก 1 ที่มีอยู่ในตอนแรกครับ
$sunday = (($remain_day - ($remain_day % 7)) / 7) + 1;
}
ก็ไม่ได้มั่นใจร้อยเปอร์เซนนะครับ มันค่อนข้างซับซ้อนอะครับ
ต้องลองทดสอบวันที่ดูหลายๆ แบบว่าได้ผลลัพธ์ตรงหรือเปล่าจนกว่าจะมั่นใจก็เอาไปใช้ได้ครับ
Date :
2009-09-16 13:21:53
By :
num
อ่อครับพอเข้าใจแล้ว ขอบคุณมากครับ
Date :
2009-09-16 13:33:29
By :
hamzter
Load balance : Server 04