|
|
|
ปฏิทินรายสัปดาห์ ภาค2 เหอๆ...สวัสดีครับ หลังจากที่ผมเคยถามเรื่องปฏิทินรายสัปดาห์ไปก่อนหน้านี้ |
|
|
|
|
|
|
|
สวัสดีครับ หลังจากที่ผมเคยถามเรื่องปฏิทินรายสัปดาห์ไปก่อนหน้านี้ ซึ่งผม อธิบายผิดไป
พอดีผมได้นำโค้ด Class Carlendar มาจากเว็บท่าน ดุนยา ถ้าผิดก็ขออภัยนะครับ
http://www.danya-reload.com/home/article/viewArticle.php?id=42
ทีนี้ผมได้นำโค้ด ปฏิทินรายสัปดาห์ มาปรับปรุงใหม่เพื่อให้ตรงตามความต้องการของผม
แต่ปรากฏว่า มันมีปัญหาก็คือ
1. ทุกครั้งที่จะทำการเลื่อนไปสัปดาห์ถัดไป ถ้ามันอยู่ รอยต่อระหว่างเดือน เช่น 29 30 31 1 2 3 4 มันจะต้องทำการคลิก 2 ครั้งถึงจะไป
2. สัปดาห์มันเลื่อนไปได้อย่งเดียว แต่พอ ถอยกลับ มันย้อนไปตั้งแค่ถึงเดือน 11 ตลอดเลยครับ เหอๆ
ผมทำจนผมงงแล้วครับ อยากทราบว่า ในโค้ดตัวอย่าง ผมได้ทำอะไรผิดหรือเปล่าครับ ขอบพระคุณครับ
ตัวอย่างรูปครับ
function getWeek($d = '', $m = '', $y = '') {
$day = date('j'); // แสดงเลขวันที่โดยไม่มีเลข 0 นำหน้า
$month = date('n'); // แสดงเลขเดือนโดยไม่มีเลข 0 นำหน้า
$year = date('Y'); // แสดง ค.ศ. ปี 4 หลัก
if ( is_numeric($d) && $d > 0 ) $day = $d * 1;
if ( is_numeric($m) && $m > 0 ) $month = $m * 1;
if ( is_numeric($y) && $y > 0 ) $year = $y * 1;
$firstWeek=date('w', mktime( 0, 0, 0, $month, 1, $year));
return ceil( ( $day + $firstWeek ) / 7 );
}
function calendarWeek($w='',$m='',$y='',$strsql=''){
$defaultWeek = getWeek( date('j'), date('n'), date('Y'));
$defaultMonth = date('n');
$defaultYear = date('Y');
$list = '';
$saveday=array();
if ( is_numeric($w) && $w > 0 && $w < 7 ) $defaultWeek = $w * 1;
if ( is_numeric($m) && $m > 0 && $m < 13) $defaultMonth = $m * 1;
if ( is_numeric($y) && $y > 0 ) $defaultYear = $y * 1;
$totalDayInMonth = date('t', mktime( 0, 0, 0, $defaultMonth, 1, $defaultYear) ); // ค้นหาวันทั้งหมดของเดือน ตั้งแต่ 28 ถึง 31
$firstDayOfWeek = date('w', mktime( 0, 0, 0, $defaultMonth, 1, $defaultYear) );
$lastDayOfWeek = date('w', mktime( 0, 0, 0, $defaultMonth, date('t', mktime( 0, 0, 0, $defaultMonth, 1, $defaultYear) ), $defaultYear) );
$backWeek = $defaultWeek - 1;
$backMonth = $defaultMonth;
$backYear = $defaultYear;
$nextWeek = $defaultWeek + 1;
$nextMonth = $defaultMonth;
$nextYear = $defaultYear;
if ( $defaultWeek == 1 && $firstDayOfWeek != 0 ){
$backMonth = $defaultMonth -1;
$backYear = $defaultYear;
if ( $backMonth < 1 ){
$backMonth = 12;
$backYear = $defaultYear -1;
}
$backWeek = getWeek( date('t', mktime( 0, 0, 0, $backMonth, 1, $backYear) ) , $backMonth, $backYear);
$totalDay = 7 - $firstDayOfWeek;
$totalDayInBackMonth = date('t', mktime( 0, 0, 0, $backMonth, 1, $backYear) );
$startDayInBackMonth = ( $totalDayInBackMonth - $firstDayOfWeek ) + 1;
$list .= "<tr>\n";
for ( $i = $startDayInBackMonth; $i <= $totalDayInBackMonth; $i++ ){
$y = ( $showBackDay ) ? $i : 0;
// $list .= $this->_blankFormat($y);
$saveday[]=$i;
}
for ( $i = 1; $i <= $totalDay; $i++ ){
// $list .= $this->_dayFormat($i);
$saveday[]=$i;
}
$list .= "</tr>\n";
}else{
$m = 1;
$startDay = ( ( 7 * ( $defaultWeek - 1 ) ) - $firstDayOfWeek ) + 1;
$i = $startDay;
$list .= "<tr>\n";
while ( $i < ( 7 + $startDay ) ){
if ( $i <= $totalDayInMonth ){
// $list .= $this->_dayFormat($i);
$saveday[]=$i;
$m++;
}
$i++;
}
if ( $m < 8 ){
$nextWeek = 1;
$nextMonth = $defaultMonth +1;
$nextYear = $defaultYear;
if ( $nextMonth > 12 ){
$nextMonth = 1;
$nextYear = $defaultYear +1;
}
$total = 8 - $m;
for ( $x = 1; $x <= $total; $x++ ){
$z = ( $showNextDay ) ? $x : 0;
// $list .= $this->_blankFormat($z);
$saveday[]=$x;
}
$list .= "</tr>\n";
}
if ( $m == 8 ){
$list .= "</tr>\n";
}
}
echo'<table border="1" style="font-size:12px;border:1px solid;">';
echo'<tr>';
echo'<td>date</td>';
for($i=0;$i<count($saveday);$i++){
echo"<tr>";
echo "<td>".$saveday[$i]."</td>";
echo"</tr>";
}
echo"</table>";
echo"<a href='?w=$backWeek&m=$backMonth&y=$backYear'> << </a>";
echo"<a href='?w=$nextWeek&m=$nextMonth&y=$nextYear'> >> </a>";
}
$ss = calendarWeek($_GET['w'], $_GET['m'], $_GET['y'],$sql);
echo $ss;
Tag : - - - -
|
|
|
|
|
|
Date :
2009-10-30 14:28:41 |
By :
kalamell |
View :
3708 |
Reply :
4 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ขอบคุณครับ คงมีโอกาสไช้บริการเร็วๆนี้
|
|
|
|
|
Date :
2009-10-30 14:36:15 |
By :
tingtongkub |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เอามาดัดแปลง เราต้องเข้าใจครับ
ผมอ่านโค้ดของคนอื่นที่มาดัดแปลงของผม ผมก็มึน 55555555+
|
|
|
|
|
Date :
2009-10-30 15:08:32 |
By :
danya |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ในที่สุดก็ได้แล้วครับ เหอๆ หลังจากที่ใช้ความสามารถทาง ภาษาอังกฤษ แบบ งู ๆ ปลา ลองอ่านจาก Google ผมก็เลยเขียนมันใหม่หมดเลย โดยอาศัยเช็ค สัปดาห์เอา จากปี ผมนั่งไล่โค้ดจนตาลายเลยเปลี่ยนวิธีครับ ถามเอง ตอบเอง ชงเอง
แล้วก็ขอขอบพระคุณทุก ๆ ท่านนะครับ ที่มาตอบคำถาม
ลองเอาไปประยุกต์ดูครับ เผื่อมันจะพอมีประโยชน์นะครับ
ผลลัพท์ที่ได้ครับ
<?php
echo'<meta http-equiv="content-type" content="text/html;charset=utf-8"/>';
$server="localhost";
$root="root";
$pw="1234";
$db="db";
$cndb=@mysql_connect($server,$root,$pw);
if(!$cndb){
echo'<p style="text-align:center;font-size:14px;font-weight:bold;color:red;">กรุณาตรวจสอบ file cfg.inc | error massage : '.mysql_error().'</p>';
exit();
}else{
$rsdb=@mysql_select_db($db);
if(!$rsdb){
echo'<p style="text-align:center;font-size:14px;font-weight:bold;color:red;">กรุณาตรวจสอบ มีแนวโน้มว่า ไม่พบ ฐานข้อมูลที่คุณต้องการ error massage : '.mysql_error().'</p>';
exit();
}
}
function rsQuery($strsql=""){
if($strsql==""){
echo'<p style="color:red">ERROR</p>';
exit();
}else{
mysql_query("SET NAMES utf8");
$rs=mysql_query($strsql);
if($rs){
return $rs;
}else{
echo'<p style="color:red">'.mysql_error().'</p>';
exit();
}
}
}
function findWeekDates($weekNumber=null, $year=null ) {
// ให้ จำนวนสัปดาห์ของปีนั้นออกมาเป็นจำนวน array (0 ถึง 52)
// ถ้าไม่ใช่สัปดาห์ มันจะส่งค่าสัปดาห์ ของวันที่นั้น ๆ
$weekNumber = ($weekNumber=='') ? date('W'): $weekNumber ;
$year = ($year=='') ? date('Y'): $year ;
$weekNumber=sprintf("%02d", $weekNumber);
for ($i=1;$i<=7;$i++) {
$arrdays[] = strtotime($year.'W'.$weekNumber.$i);
}
return $arrdays;
}
$week= (isset($_GET['week']) && $_GET['week'] !=='')? $_GET['week'] : date('W') ;
$year = (isset($_GET['year']) && $_GET['year'] !=='')? $_GET['year'] : date('Y') ;
if($week>52) {
$week = 1;
$year++;
}elseif($week<1) {
$week=52;
$year--;
}
$backyear=$year;
$nextyear=$year;
$week_days = findWeekDates($_GET['week'],$_GET['year']);
// $starting_date = date('Y-m-d', $week_days[0]); วันเริ่มต้นของสัปดาห์ ยึดเอาวันจันทร์
// $ending_date = date('Y-m-d', $week_days[6]); วันสิ้นสุดของสัปดาห์ ยึดเอาวันอาทิตย์
// สามารถนำเอาค่า $week_days[] ไปเช็คหาวันจันทร์ - อาทิตย์ ทำเป็น label ส่วนหัวได้อีก ลองหาวิธีดูนะครับ เหอๆ
echo"<br>";
$nextweek = $week+1; // หาสัปดาห์ถัดไป
$backweek=$week-1; // หาสัปดาห์ก่อนหน้า
if($backweek==0){
$backweek=52;
$backyear=$year-1;
}
if($nextweek==0){
$nextyear=$year+1;
}
echo"<a href=\"?week=".$backweek."&year=".$backyear."\">ย้อนกลับ</a> <a href=\"?week=".$nextweek."&year=".$nextyear."\">ถัดไป</a><br>";
echo'<table width="100%" border="1">';
echo'<tr>';
echo'<td>วันที่</td>';
// ผมสั่งให้เรียก query เวลาที่ได้ทำการบันทึกใน database
$sql="Select * From tbl_timefix order by timeid";
$rs=rsQuery($sql);
while($row=mysql_fetch_array($rs)){
echo'<td>'.$row['timename'].'</td>';
$arr[]=$i;
$i++;
}
echo'</tr>';
for($i=0;$i<count($week_days);$i++){
echo'<tr>';
echo '<td>'.date('Y-m-d',$week_days[$i]).'</td>';
for($j=0;$j<count($arr);$j++){
echo'<td> </td>';
}
echo'<tr>';
}
echo'</table>';
?>
ความพยายามอยู่ที่ไหน ความสำเร็จอยู่ที่นั่น ขอให้กำลังใจทุกคนครับ
|
|
|
|
|
Date :
2009-10-30 17:10:08 |
By :
kalamell |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอนนี้กำลังทำอยู่เลยค่ะ
|
|
|
|
|
Date :
2012-11-18 20:22:25 |
By :
MySeason22 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 05
|