Register Register Member Login Member Login Member Login Forgot Password ??
PHP , ASP , ASP.NET, VB.NET, C#, Java , jQuery , Android , iOS , Windows Phone
 

Registered : 109,037

HOME > PHP > PHP Forum > [ทำได้แล้วครับ] การคำนวณจำนวนวันลา รบกวนช่วยดูให้หน่อยครับ ผมพลาดตรงไหนไป



 

[ทำได้แล้วครับ] การคำนวณจำนวนวันลา รบกวนช่วยดูให้หน่อยครับ ผมพลาดตรงไหนไป

 



Topic : 059328



โพสกระทู้ ( 96 )
บทความ ( 1 )



สถานะออฟไลน์




ผมทำ function ขึ้นมาเพื่อคำนวณวันลาของพนักงาน โดยมีเงื่อนไขคือ
1.เข้างาน 09.00 พักกินข้าว 12.00-13.00 เลิกงาน 18.00 = ทำงาน 8 ชั่วโมง หักพักเที่ยงออก 1 ชั่วโมง
2.ลาได้ขั้นต่ำ 1 ชั่วโมงขึ้นไป = 0.125 (1 วัน = 0.125 x 8)
3.ถ้าช่วงที่ลาเริ่มที่ก่อน 12.00 และสิ้นสุดที่่หลัง 13.00 จะหักพักเที่ยง 1 ชั่วโมง เ่ช่น ลา 10.00 - 14.00 = ลา 3 ชั่วโมง

ปัญหาที่เจอก็คือ ผมลองตั้งวันที่เริ่มต้น = 2011-03-27 09:00:00 และวันที่่สิ้นสุด = 2011-03-28 18:00:00
จะได้คำตอบออกมา = 1.95833333333 ทั้งที่ความจริงมันไม่น่าจะมีเศษทศนิยมออกมา แต่ถ้าตั้งเป็นวันอื่นกลับไม่เจอปัญหานี้
เช่น วันที่เริ่มต้น = 2011-03-25 09:00:00 และวันที่่สิ้นสุด = 2011-03-27 18:00:00 จะได้คำตอบเป็น 3 ถ้วน ๆ ครับ

calc_leave.php
<?
function calc_leave($leave_start,$leave_end)
{
$y_start=date("Y",strtotime($leave_start));
$m_start=date("m",strtotime($leave_start));
$d_start=date("d",strtotime($leave_start));
$y_end=date("Y",strtotime($leave_end));
$m_end=date("m",strtotime($leave_end));
$d_end=date("d",strtotime($leave_end));
$date_total=((strtotime($y_end."-".$m_end."-".$d_end) - strtotime($y_start."-".$m_start."-".$d_start))/(60*60*24));
$h_start=date("H",strtotime($leave_start));
$h_end=date("H",strtotime($leave_end));
$h_total=$h_end-$h_start;
if(($h_start==9)&&($h_end==18))
{
$h_total=1;
}
elseif(($h_start<12)&&($h_end>12))
{
$h_total--;
$h_total=($h_total*0.125);
}
elseif($h_total<0)
{
$date_total--;
$h_start=18-$h_start;
$h_end=$h_end-9;
$h_total=($h_end+$h_start)*0.125;
}
elseif($h_total>0)
{
$h_total=($h_total*0.125);
}
return $date_total+$h_total;
}
?>


index.php
<?error_reporting(1);?>
<?
include("calc_leave.php");
$leave_start="2011-03-27 09:00:00";
$leave_end="2011-03-28 18:00:00";
echo calc_leave($leave_start,$leave_end);
?>




Tag : PHP









ประวัติการแก้ไข
2011-04-28 10:05:27
Move To Hilight (Stock) 
Send To Friend.Bookmark.
Date : 2011-04-27 16:59:00 By : NarinNil View : 4685 Reply : 3
 

 

No. 1



โพสกระทู้ ( 74,058 )
บทความ ( 838 )

สมาชิกที่ใส่เสื้อไทยครีเอท

สถานะออฟไลน์
Twitter Facebook

ลองใช้ function ตัวนี้ดูครับ เห็นมีสมาชิกโพสไว้ครับ

Go to : คำนวนเวลาด้วย php compare หาค่างต่างของวันที่ กี่วัน , กี่ ชม. , กี่ นาที ช่วยแนะนำด้วยครับ ๆๆๆๆๆๆๆๆๆๆๆๆ






แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-04-27 21:58:52 By : webmaster
 


 

No. 2



โพสกระทู้ ( 96 )
บทความ ( 1 )



สถานะออฟไลน์


ขอบคุณครับ จะลองศึกษาดูก่อน
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-04-27 22:41:19 By : NarinNil
 

 

No. 3



โพสกระทู้ ( 96 )
บทความ ( 1 )



สถานะออฟไลน์


ได้คำตอบแล้วครับ code ผมไม่ได้ผิด แต่ผิดตรงการตั้งค่าที่ตัว web server
คือเราต้องไปตั้งค่าใน php.ini ให้เป็น date.timezone = "Asia/Bangkok"
แล้ว restart apache หรือ iis ของท่านรอบนึงก็ใช้ได้ (ผมใช้ appserv 2.6.0)
ทดสอบ code แล้วใช้ได้ปกติ เฮ้อ นั่งงมตั้งนานว่าผมพลาดอะไรไป พลาดที่การ
ตั้งค่า่บน server นี่เอง

สาเหตุเพราะผมลองเอาโค้ดตามลิงค์ที่ mr.win แนะนำมารัน โดยเริ่มต้นที่ 27/03/2011
สิ้นสุด 28/03/2011 เอา 2 อันนี้มาลบกัน ควรจะได้คำตอบ = 24 ชั่วโมง หรือ 1 วัน
แต่ก็ยังได้คำตอบออกมาเป็น 23 ชั่วโมง สุดท้ายเอาวันที่เจ้าปัญหา 28/03/2011
ไปหาใน google ก็พบว่า ทางยุโรเขาปรับเวลาต้อนรับฤดูใบไม้ผลิให้เร็วขึ้น 1 ชั่วโมง
ดังนั้นเท่ากับว่าวันที่ 28/03/2011 = 23 ชั่วโมงก็ถูกตามมาตรฐานสากลแล้ว เพราะเขาเคย
เพิ่มเวลาไป 1 ชั่วโมงแล้วตอนเข้าหน้าหนาว (วันที่ 31/10/2011 มี 25 ชั่วโมงครับ) แต่เราคนไทยอยู่ที่
GMT+7 ไม่ต้องไปยุ่งกับเขา เวลาเราเดิน 1 วัน = 24 ชั่วโมงตลอด แต่ apache เดิม ๆ มันมาจากฝรั่งทำ
เลยทำเวลามาตรฐานที่ติดมาเป็นแบบฝรั่ง เราเลยต้องปรับมาเป็นแบบไทย ๆ ครับ ตามที่แจ้งไปแล้ว


ประวัติการแก้ไข
2011-04-28 09:47:50
2011-04-28 09:49:48
แสดงความคิดเห็นโดยอ้างถึง ความคิดเห็นนี้
Date : 2011-04-28 09:47:12 By : NarinNil
 

   

ค้นหาข้อมูล


   
 

แสดงความคิดเห็น
Re : [ทำได้แล้วครับ] การคำนวณจำนวนวันลา รบกวนช่วยดูให้หน่อยครับ ผมพลาดตรงไหนไป
 
 
รายละเอียด
 
ตัวหนา ตัวเอียง ตัวขีดเส้นใต้ ตัวมีขีดกลาง| ตัวเรืองแสง ตัวมีเงา ตัวอักษรวิ่ง| จัดย่อหน้าอิสระ จัดย่อหน้าชิดซ้าย จัดย่อหน้ากึ่งกลาง จัดย่อหน้าชิดขวา| เส้นขวาง| ขนาดตัวอักษร แบบตัวอักษร
ใส่แฟลช ใส่รูป ใส่ไฮเปอร์ลิ้งค์ ใส่อีเมล์ ใส่ลิ้งค์ FTP| ใส่แถวของตาราง ใส่คอลัมน์ตาราง| ตัวยก ตัวห้อย ตัวพิมพ์ดีด| ใส่โค้ด ใส่การอ้างถึงคำพูด| ใส่ลีสต์
smiley for :lol: smiley for :ken: smiley for :D smiley for :) smiley for ;) smiley for :eek: smiley for :geek: smiley for :roll: smiley for :erm: smiley for :cool: smiley for :blank: smiley for :idea: smiley for :ehh: smiley for :aargh: smiley for :evil:
Insert PHP Code
Insert ASP Code
Insert VB.NET Code Insert C#.NET Code Insert JavaScript Code Insert C#.NET Code
Insert Java Code
Insert Android Code
Insert Objective-C Code
Insert XML Code
Insert SQL Code
Insert Code
เพื่อความเรียบร้อยของข้อความ ควรจัดรูปแบบให้พอดีกับขนาดของหน้าจอ เพื่อง่ายต่อการอ่านและสบายตา และตรวจสอบภาษาไทยให้ถูกต้อง

อัพโหลดแทรกรูปภาพ

Notice

เพื่อความปลอดภัยของเว็บบอร์ด ไม่อนุญาติให้แทรก แท็ก [img]....[/img] โดยการอัพโหลดไฟล์รูปจากที่อื่น เช่นเว็บไซต์ ฟรีอัพโหลดต่าง ๆ
อัพโหลดแทรกรูปภาพ ให้ใช้บริการอัพโหลดไฟล์ของไทยครีเอท และตัดรูปภาพให้พอดีกับสกรีน เพื่อความโหลดเร็วและไฟล์ไม่ถูกลบทิ้ง

   
  เพื่อความปลอดภัยและการตรวจสอบ กระทู้ที่แทรกไฟล์อัพโหลดไฟล์จากที่อื่น อาจจะถูกลบทิ้ง
 
โดย
อีเมล์
บวกค่าให้ถูก
<= ตัวเลขฮินดูอารบิก เช่น 123 (หรือล็อกอินเข้าระบบสมาชิกเพื่อไม่ต้องกรอก)







Exchange: นำเข้าสินค้าจากจีน, Taobao, เฟอร์นิเจอร์, ของพรีเมี่ยม, ร่ม, ปากกา, power bank, แฟลชไดร์ฟ, กระบอกน้ำ

Load balance : Server 02
ThaiCreate.Com Logo
© www.ThaiCreate.Com. 2003-2024 All Rights Reserved.
ไทยครีเอทบริการ จัดทำดูแลแก้ไข Web Application ทุกรูปแบบ (PHP, .Net Application, VB.Net, C#)
[Conditions Privacy Statement] ติดต่อโฆษณา 081-987-6107 อัตราราคา คลิกที่นี่