|
|
|
โจทย์มีอยู่ว่า ต้องการวนลูปค่าของ สัปดาห์ในเดือนนั้น และเช็คว่า แต่ละสัปดาห์มีวันที่เท่าไหร่บ้างครับ |
|
|
|
|
|
|
|
ทำได้แล้ว เอาโค้ดมาบอกต่อเลยครับ เดี๋ยวผมจะทดลองหาวิธีคิดให้ ตัวที่ติดขัด
เพราะเห็นคำถามแนวนี้เยอะจัง จะได้เป็นแนวให้กับรุ่นหลัง ๆ ด้วยครับ
|
|
|
|
|
Date :
2012-07-03 17:02:01 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
list($today, $tomonth, $toyear) = split('[/.-]', $RpDate); // อันนี้ผมเอามาแยกวันที่ เดือน ปี ออก
$fromDate = $tomonth . "/" . "01" . "/".$toyear; อันนี้คือค่าเริ่มต้นของเดือนครับ
$frd=$toyear."-".$tomonth."-"."01";
$datewe= date("t",strtotime($frd)); // อันนี้หาค่าวันสุดท้ายของเดือนครับ
$toDate = $tomonth . "/" . $datewe . "/".$toyear;
$dateMonthYearArr = array();
$fromDateTS = strtotime($fromDate);
$toDateTS = strtotime($toDate);
for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (60 * 60 * 24)) { // ส่วนนี้วนลูปหาทุกวัน
$currentDateStr = date("Y-m-d",$currentDateTS);
$sldate = date("d-M-Y",$currentDateTS);
$gitem_id[$g] = $value['IdBank']; //เก็บ id สำหรับกำหนดเงื่อนไขในการวนลูปแนวกว้าง
$gitem[$g] = $sldate;
$gitemac[$g] = $currentDateStr ; //เก็บตัวแปร item สำหรับแสดงผลหัว column
$g ++;
}
Out Put ที่ผมต้องการคือ
| สัปดาที่ 1 (วันที่ 1) | สัปดาที่ 2 (2-8) | สัปดาห์ที่ 3 (9-15) | ... | สัปดาห็ที่ 6(30-31)
แบบนี้อะครับผม
|
|
|
|
|
Date :
2012-07-03 18:08:08 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
for ($currentDateTS = $fromDateTS; $currentDateTS <= $toDateTS; $currentDateTS += (7*60 * 60 * 24)) { // เอา 7 ตูณเข้าไป วันจะวนออกมาแบบนี้
01-Jul-2012
08-Jul-2012
15-Jul-2012
22-Jul-2012
29-Jul-2012
|
|
|
|
|
Date :
2012-07-03 23:42:20 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
function rangweek ( $year, $month ) {
$last_month_day_num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$first_month_day_timestamp = strtotime($year.'-'.$month.'-01');
$last_month_daty_timestamp = strtotime($year.'-'.$month.'-'.$last_month_day_num );
$first_month_week = date('W', $first_month_day_timestamp);
$last_month_week = date('W', $last_month_daty_timestamp);
$mweek = array();
for( $week = $first_month_week; $week <= $last_month_week; $week ++ ) {
#echo sprintf('%d-%02d-1', $year, $week ), "\n <br>";
array_push( $mweek, array(
date("Y-m-d", strtotime( sprintf('%dW%02d-1', $year, $week ) ) ),
date("Y-m-d", strtotime( sprintf('%dW%02d-7', $year, $week ) ) ),
) );
}
return $mweek;
}
$mweek = rangweek(2012, 07);
$cm = count($mweek);
for($i=0;$i<=$cm-1;$i++){
echo $i.". ".$mweek[$i][0]." - ".$mweek[$i][1]."<hr>";
}
อันนี้คือโค้ดที่ผมทดสอบนะครับ
|
|
|
|
|
Date :
2012-07-04 09:01:46 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
สุดยอด ครับผม ทีนี้ก็เหลืออยู่ว่า วันที่ไหนที่อยู่นอกเหนือเดือนนั้นๆ เราจะตัดออกยังไงครับ
|
|
|
|
|
Date :
2012-07-04 10:23:20 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
0. 2012-05-28 - 2012-06-03
1. 2012-06-04 - 2012-06-10
2. 2012-06-11 - 2012-06-17
3. 2012-06-18 - 2012-06-24
4. 2012-06-25 - 2012-07-01
ทีนี้คือสิ่งที่ผมต้องการคือ
0. 2012-06-01 - 2012-06-03
1. 2012-06-04 - 2012-06-10
2. 2012-06-11 - 2012-06-17
3. 2012-06-18 - 2012-06-24
4. 2012-06-25 - 2012-06-30
|
|
|
|
|
Date :
2012-07-04 16:59:10 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
อันนี้ที่ผมเอามาจัดเข้ากับตารางที่ผมต้องการ
Code (PHP)
<?
extract($_POST);
extract($_GET);
date_default_timezone_set("Asia/Bangkok");
$year='2012';
$month='06';
function rangweek ( $year, $month ) {
$last_month_day_num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$first_month_day_timestamp = strtotime($year.'-'.$month.'-01');
$last_month_daty_timestamp = strtotime($year.'-'.$month.'-'.$last_month_day_num );
$first_month_week = date('W', $first_month_day_timestamp);
$last_month_week = date('W', $last_month_daty_timestamp);
$mweek = array();
for( $week = $first_month_week; $week <= $last_month_week; $week ++ ) {
#echo sprintf('%d-%02d-1', $year, $week ), "\n <br>";
array_push( $mweek, array(
date("Y-m-d", strtotime( sprintf('%dW%02d-1', $year, $week ) ) ),
date("Y-m-d", strtotime( sprintf('%dW%02d-7', $year, $week ) ) ),
) );
}
return $mweek;
}
$mweek = rangweek($year, $month);
$cm = count($mweek);
?>
<table width="100%" border="0" cellpadding="1" cellspacing="1" bgcolor="#800040">
<tr bgcolor="#FFFFFF">
<?
for($i=0;$i<=$cm-1;$i++){
?>
<td align="center"><strong><?
echo $i.". ".$mweek[$i][0]." - ".$mweek[$i][1];
?>
</strong></td>
<?
}
?>
</tr>
<tr bgcolor="#FFFFFF">
<?
$gitem_id=='5';
for($g=0;$g<=$cm-1;$g++){
?>
<td align="center">Data</td>
<?
}
?>
</tr>
<tr bgcolor="#C09230">
<?
for($g=0;$g<=$cm-1;$g++){
?>
<td align="center"><b>SUM</b></td>
<?
}
?>
</tr>
</table>
|
|
|
|
|
Date :
2012-07-04 18:47:08 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
หุหุ ในที่สุด เชื่อแล้วหละว่าความพยายามอยุ่ที่ไหน ความสำเร็จ อยุ่ที่นั่นจริงๆๆๆ แต่ โคตอาจจะยาวไปหน่อย
|
|
|
|
|
Date :
2012-07-04 19:49:43 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Code (PHP)
<?
extract($_POST);
extract($_GET);
date_default_timezone_set("Asia/Bangkok");
$year='2012';
$month='05';
function rangweek ( $year, $month ) {
$last_month_day_num = cal_days_in_month(CAL_GREGORIAN, $month, $year);
$first_month_day_timestamp = strtotime($year.'-'.$month.'-01');
$last_month_daty_timestamp = strtotime($year.'-'.$month.'-'.$last_month_day_num );
$first_month_week = date('W', $first_month_day_timestamp);
$last_month_week = date('W', $last_month_daty_timestamp);
$mweek = array();
for( $week = $first_month_week; $week <= $last_month_week; $week ++ ) {
#echo sprintf('%d-%02d-1', $year, $week ), "\n <br>";
array_push( $mweek, array(
date("Y-m-d", strtotime( sprintf('%dW%02d-1', $year, $week ) ) ),
date("Y-m-d", strtotime( sprintf('%dW%02d-7', $year, $week ) ) ),
) );
}
return $mweek;
}
$mweek = rangweek($year, $month);
$cm = count($mweek);
?>
<style type="text/css">
<!--
.style1 {
font-family: Tahoma;
font-size: 12px;
font-weight:normal;
}
-->
</style>
<table width="100%" border="0" cellpadding="1" cellspacing="1" bgcolor="#800040">
<tr bgcolor="#FFFFFF">
<?
for($i=0;$i<=$cm-1;$i++){
$w=$i+1;
//echo $cm-1;
?>
<td align="center"><strong><?
echo "Week ".$w.".<br/> ";
if($i=='0'){
$DateStart='01';
} else {
list($toyear, $tomonth, $DateStart) = split('[/.-]', $mweek[$i][0]);
}
if($i==$cm-1){
$DateEnd='31';
} else {
list($toyear1, $tomonth1, $DateEnd) = split('[/.-]', $mweek[$i][1]);
}
$DateShow=$DateStart."-".$DateEnd."/".$month."/".$year;
echo "<span class='style1'>".$DateShow."</span>";
// $mweek[$i][0]." - ".$mweek[$i][1];
?>
</strong></td>
<?
}
?>
</tr>
<tr bgcolor="#FFFFFF">
<?
for($g=0;$g<=$cm-1;$g++){
?>
<td align="center">Data</td>
<?
}
?>
</tr>
<tr bgcolor="#C09230">
<?
for($g=0;$g<=$cm-1;$g++){
?>
<td align="center">SUM</td>
<?
}
?>
</tr>
</table>
เอามาแบ่งปันครับ เผื่อมีใครจะได้ใช้เหมือนผม ขอบคุณ คุณ deawx ที่ให้แนวทางครับ
|
|
|
|
|
Date :
2012-07-04 21:10:20 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
บ่เป็นหยังครับผม
|
|
|
|
|
Date :
2012-07-04 22:08:04 |
By :
deawx |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ครับผม กะส่อยๆกันไปเนาะ คือคำโบราณเผิ่นว่า หนักส่อยกันหาบ หยาบส่อยกันดึง ว่าซั่นว่า....
|
|
|
|
|
Date :
2012-07-04 23:21:00 |
By :
ddsiam |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
code มีปัญหาใช้ไม่ได้นะครับ ถ้าเป็นเดือน 12 จะวนลูปออกมาไม่ได้ครับ ลองทดสอบดูนะครับ
|
|
|
|
|
Date :
2013-04-12 12:33:21 |
By :
rockhd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เดือน 1 กับ 12 หาไม่ได้ครับ
|
|
|
|
|
Date :
2013-04-12 13:28:56 |
By :
rockhd |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 01
|