|
|
|
ขอสอบถาม เรื่องการทำ ใบลา หน่อยคัฟ เช่น เริ่มลาวันที่ 2016-08-11 ถึง 2016-08-14 ระหว่างนั้น จะมี วันหยุดราชการ 1 วัน |
|
|
|
|
|
|
|
ขอสอบถาม เรื่องการทำ ใบลา หน่อยคัฟ เช่น เริ่มลาวันที่ 2016-08-11 ถึง 2016-08-14 ระหว่างนั้น จะมี วันหยุดราชการ 1 วัน และ วันหยุดเสาร์ อาทิตย์ 2 วัน ก็เท่ากับ ลางาน 1 วัน แต่ ทำไมถึงบันทึก จำนวนวันลาไม่ได้คัฟ ช่วยชี้แนะหน่อยคัฟ
Code (PHP)
<?
if ($_POST["button"]=="บันทึก"){
//เช็คปุ่ม เมื่อมีการกดปุ่มจะทำงานวนลูป
function DateTimeDiff($strDateTime1,$strDateTime2){//ฟั่งชั่น DateTimeDiff datetime formate Y-m-d H:i
$date = 0;//ประกาศตัวแปลเพื่อกำหนดค่าวัน ให้ กับ 0
$hour = 0;//ประกาศตัวแปลเพื่อกำหนดค่าชั่่วโมง ให้ กับ 0
$min = 0;//ประกาศตัวแปลเพื่อกำหนดค่านาที ให้ กับ 0
$day1=0;//จำนวนวัน กับ 0
$escape=0;//วันหยุดต่อสัปดาห์ 0
$diff = strtotime($strDateTime2) - strtotime($strDateTime1);
$date = floor($diff/(60*60*24));//เป็นการหาค่าวัน
$hour = floor(($diff-($date*60*60*24))/(60*60));//เป็นการหาค่าชั่วโมง
$min = floor(($diff-($date*60*60*24)-($hour*60*60))/60);//เป็นการหาค่าวินาที
$day1 =date('N',strtotime($strDateTime1)); // php5.1.0 ขึ้นไป ถ้าไม่ใช่ไปอัพเดท :>
$escape =(int)($date/7)*2;//วันหยุดต่อสัปดาห์
$mod=$date%7;
if($mod !=0){
if($day1 ==6 ) $escape++;
if($day1==7)$escape++;
if($day1 ==6 && $mod>1)$escape++;
//if($mod ==6) $escape++; แก้เอาออก มันซ้ำ
if($day1+$mod>5 && $day1<6)$escape++;
if($day1+$mod>6 && $day1<6)$escape++;
}
return $date-$escape;
}
$sql="select*from leave_leave where Leave_id ";//เรียกค่า วัน เวลา มาจากตาราง leave_leave
$query=mysql_query($sql);
while($result=mysql_fetch_array($query)){
$date1 =$result['Leave_date'];//วันเริ่มต้น รับค่าจาก Leave_date
$date2 =$result['Leave_date1'];//วันสิ้นสุด รับค่าจาก Leave_date1
$diff =DateTimeDiff($date1,$date2);//$diff จำนวนที่คำนวณออกมาจากฟังก์ชั่น DateTimeDiff
}
$new_id =mysql_result(mysql_query("Select Max(Leave_id)+1 as MaxID from leave_leave"),0,"MaxID");// การรันรหัส อัติโนมัติ เลือกเอาค่า id ที่มากที่สุดในฐานข้อมูลและบวก 1 เข้าไปด้วยเลย
if($new_id==''){ // ถ้าได้เป็นค่าว่าง หรือ null ก็แสดงว่ายังไม่มีข้อมูลในฐานข้อมูล
$Leave_id="00001";
}else{
$Leave_id=sprintf("%05d",$new_id);//ถ้าไม่ใช่ค่าว่าง
}
$sql="insert into leave_leave
(Leave_id,
Leave_date,
Leave_date1,https://www.thaicreate.com/topic/new.html#top
Leave_number,
Leave_reason,
Leave_doc)
values(
'".$Leave_id."',
'$Leave_date',
'$Leave_date1',
'".$diff."',
'$Leave_reason',
'$Leave_doc')";
$query = mysql_query($sql)or die("myasql error ('$sql')");
if ($query){
echo "<script language='javascript'>alert('บันทึกข้อมูลเรียบร้อยแล้ว')</script>";//Message box แจ้งเตือน
echo "<meta http-equiv='refresh' content='0 ;url=statusleaveemp.php'>";//หน่วงเวลาเพื่อ refresh หน้ากลับไปยังหน้าแรกของ leave_leave
}else {
echo "บันทึกข้อมูลไม่สำเร็จ";
}
}
?>
Tag : PHP
|
|
|
|
|
|
Date :
2016-03-04 09:02:51 |
By :
narutokarp |
View :
948 |
Reply :
3 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
ตอบความคิดเห็นที่ : 1 เขียนโดย : apisitp เมื่อวันที่ 2016-03-04 09:19:33
รายละเอียดของการตอบ ::
ค่าที่ได้จากการ ECHO คัฟ แล้วจะต่อ ตัวแปล '".$diff."' ยังไงคัฟให้บันทึกงฐานข้อมูลได้ ช่วยชี้แนะหน่อยคัฟ
----------------------------------------------
จะแสดงว่า
------------
วันที่เริ่ม=2016-08-11
ถึงวันที่สินสุด=2016-08-14
จำนวนวันที่ลาหยุดเท่ากับ 1 วัน
----------------------------------------------
Code (PHP)
<?php
function DateTimeDiff($strDateTime1,$strDateTime2){//datetime formate Y-m-d H:i
$date = 0;
$hour = 0;
$min = 0;
$day1=0;
$escape=0;
$diff = strtotime($strDateTime2) - strtotime($strDateTime1);
$date = floor($diff/(60*60*24));
$hour = floor(($diff-($date*60*60*24))/(60*60));
$min = floor(($diff-($date*60*60*24)-($hour*60*60))/60);
$day1 =date('N',strtotime($strDateTime1)); // php5.1.0 ขึ้นไป ถ้าไม่ใช่ไปอัพเดท :>
$escape =(int)($date/7)*2;
$mod=$date%7;
if($mod !=0){
if($day1 ==6 ) $escape++;
if($day1==7)$escape++;
if($day1 ==6 && $mod>1)$escape++;
//if($mod ==6) $escape++; แก้เอาออก มันซ้ำ
if($day1+$mod>5 && $day1<6)$escape++;
if($day1+$mod>6 && $day1<6)$escape++;
}
return $date-$escape;
}
$date1 ="2016-08-11 ";//*****วันที่เริ่มลางาน*****//
$date2 ="2016-08-14 ";//*****วันที่สิ้นสุดการลางาน*****//
echo "วันที่เริ่ม=$date1 <br>";
echo "ถึงวันที่สินสุด=$date2 <br>";
$diff =DateTimeDiff($date1,$date2);
echo "จำนวนวันที่ลาหยุดเท่ากับ $diff <br>";
?>
<?
if ($_POST["button"]=="บันทึก"){//เช็คปุ่ม เมื่อมีการกดปุ่มจะทำงานวนลูป
$new_id =mysql_result(mysql_query("Select Max(Leave_id)+1 as MaxID from leave_leave"),0,"MaxID");// การรันรหัส อัติโนมัติ เลือกเอาค่า id ที่มากที่สุดในฐานข้อมูลและบวก 1 เข้าไปด้วยเลย
if($new_id==''){ // ถ้าได้เป็นค่าว่าง หรือ null ก็แสดงว่ายังไม่มีข้อมูลในฐานข้อมูล
$Leave_id="00001";
}else{
$Leave_id=sprintf("%05d",$new_id);//ถ้าไม่ใช่ค่าว่าง
}
$sql="insert into leave_leave
(Leave_id,
Leave_date,
Leave_date1,
Leave_number,
Leave_reason,
Leave_doc)
values(
'".$Leave_id."',
'$Leave_date',
'$Leave_date1',
'".$diff."',
'$Leave_reason',
'$Leave_doc')";
$query = mysql_query($sql)or die("myasql error ('$sql')");
if ($query){
echo "<script language='javascript'>alert('บันทึกข้อมูลเรียบร้อยแล้ว')</script>";//Message box แจ้งเตือน
echo "<meta http-equiv='refresh' content='0 ;url=statusleaveemp.php'>";//หน่วงเวลาเพื่อ refresh หน้ากลับไปยังหน้าแรกของ leave_leave
}else {
echo "บันทึกข้อมูลไม่สำเร็จ";
}
}
?>
|
|
|
|
|
Date :
2016-03-04 10:06:33 |
By :
narutokarp |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
เผื่อจะมีประโยชน์ครับ
PHP Checking Work Day , Holiday
|
|
|
|
|
Date :
2016-03-04 10:07:43 |
By :
mr.win |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Load balance : Server 03
|