บทความแนะนำการเขียนโปรแกรม PHP นี้เกิดจากคำถามของแฟนเพจ "PHP สำหรับผู้เริ่มต้น" ได้สอบถามเข้ามาว่า ถ้าต้องการเขียนโปรแกรมบันทึกวันเวลาจ่ายยาเลยกำหนด ที่มีการการชดเชยเวลาในครั้งต่อไป จะต้องเขียนโปรแกรมอย่างไร ซึ่งผู้เขียนได้ลองค้นหาตัวอย่างต่างๆแล้ว แต่ก็ยังไม่ได้ที่ใกล้เคียงกับความต้องการ และส่วนใหญ่จะเป็นเพียงฟังก์ชั่นคำนวณเวลาทั่วไปเท่านั้น จึงเป็นที่มาของบทความสอนเขียนโปรแกรม PHP กับเรื่องของ วันเวลา บทความนี้ขึ้นมา
สำหรับโค้ด PHP ที่ใช้ในตัวอย่างมีดังต่อไปนี้
เมื่อนำโค้ดไปรัน จะได้ผลลัพธ์ของโปรแกรมดังนี้
PHP CI MANIA - PHP Code Generator
ฟังก์ชั่นอ้างอิง (PHP)
DateTime::diff
http://php.net/manual/en/datetime.diff.php
DateTime::format
http://php.net/manual/en/datetime.format.php
DateTime::getTimestamp
http://php.net/manual/en/datetime.gettimestamp.php
DateTime::modify
http://php.net/manual/en/datetime.modify.php
สำหรับการทำงานของโค้ด PHP ในตัวอย่างนี้ก็คือ การหาความต่างของเวลาปฏิบัติงาน กับเวลาที่กำหนดไว้ แล้วนำไปคำนวณเป็นวินาที เพื่อนำไปใช้เลื่อนเวลาในครั้งต่อไป หรือนำไปลดเวลาในครั้งต่อไป ขึ้นอยู่กับว่าผลต่างจะเป็นบวกหรือลบนั่นเอง
สำหรับโค้ด PHP ที่ใช้ในตัวอย่างมีดังต่อไปนี้
PHP Code
<?php
$title = "เลื่อนกำหนดเวลาครั้งถัดไป เมื่อบันทึกเลยกำหนดในครั้งก่อน";
$due_date1 = '2017-09-24 14:20:00';//กำหนดครั้งที่ 1
$due_date2 = '2017-09-24 15:20:00';
$due_date3 = '2017-09-24 16:20:00';
$action_date1 = '2017-09-24 14:20:00';//การปฏิบัติครั้งที่ 1
$action_date2 = '2017-09-24 15:20:00';//การปฏิบัติครั้งที่ 2
$action_date3 = '2017-09-24 16:20:00';//การปฏิบัติครั้งที่ 3
if(isset($_GET['action_date1']) && $_GET['action_date1']!= ''){
$action_date1 = $_GET['action_date1'];
}
if(isset($_GET['action_date2']) && $_GET['action_date2']!= ''){
$action_date2 = $_GET['action_date2'];
}
if(isset($_GET['action_date3']) && $_GET['action_date3']!= ''){
$action_date3 = $_GET['action_date3'];
}
$diffSeconds1 = '';
$diffSeconds2 = '';
$diffSeconds3 = '';
$shif_date2 = '';
$shif_date3 = '';
function get_time_diff($start, $end){
$dteStart = new DateTime($start);
$dteEnd = new DateTime($end);
$dteDiff = $dteStart->diff($dteEnd); // หาผลต่าง
$result = $dteDiff->format("%H:%I:%S");//แสดงในรูปแบบ ชั่วโมง : นาที : วินาที
$diffSeconds = $dteEnd->getTimestamp() - $dteStart->getTimestamp();//คิดเป็นวินาที สำหรับนำไปคำนวณ
return array('format' => $result, 'second' => $diffSeconds);
}
$arr = get_time_diff($due_date1, $action_date1);
$time_late1 = $arr['format'];
$diffSeconds1 = $arr['second'];
$d_date2 = $due_date2;
if($diffSeconds1 <> 0){
$date = new DateTime($due_date2);
$date->modify($diffSeconds1.' second');
$shif_date2 = $date->format("Y-m-d H:i:s");
$d_date2 = $shif_date2;
}
$arr = get_time_diff($d_date2, $action_date2);
$time_late2 = $arr['format'];
$diffSeconds2 = $arr['second'];
$d_date3 = $due_date3;
if($diffSeconds2 <> 0){
$date = new DateTime($due_date3);
$date->modify($diffSeconds2.' second');
$shif_date3 = $date->format("Y-m-d H:i:s");
$d_date3 = $shif_date3;
}
$arr = get_time_diff($d_date3, $action_date3);
$time_late3 = $arr['format'];
$diffSeconds3 = $arr['second'];
?>
<html>
<head>
<meta charset="UTF-8">
<title><?php echo $title;?></title>
</head>
<body>
<h1><?php echo $title;?></h1>
<form>
เวลาปฏิบัติ ครั้งที่ 1:
<input type="text" name="action_date1" value="<?php echo $action_date1;?>" /><br>
เวลาปฏิบัติ ครั้งที่ 2:
<input type="text" name="action_date2" value="<?php echo $action_date2;?>" />
<br>
เวลาปฏิบัติ ครั้งที่ 3:
<input type="text" name="action_date3" value="<?php echo $action_date3;?>" />
<input type="submit" value="ส่งข้อมูล"/>
</form>
<table border="1" width="100%">
<tr>
<th>#</th>
<th>เวลาที่กำหนด</th>
<th>เลื่อนกำหนดเวลาเป็น</th>
<th>เวลาปฏิบัติ</th>
<th>จำนวนเวลาที่เลย</th>
<th>คิดเป็นวินาที</th>
</tr>
<tr>
<td>1</td>
<td><?php echo $due_date1;?></td>
<td>-</td>
<td><?php echo $action_date1;?></td>
<td><?php echo $time_late1;?></td>
<td><?php echo $diffSeconds1;?> วินาที</td>
</tr>
<tr>
<td>2</td>
<td><?php echo $due_date2;?></td>
<td><?php echo $shif_date2;?></td>
<td><?php echo $action_date2;?></td>
<td><?php echo $time_late2;?></td>
<td><?php echo $diffSeconds2;?> วินาที</td>
</tr>
<tr>
<td>3</td>
<td><?php echo $due_date3;?></td>
<td><?php echo $shif_date3;?></td>
<td><?php echo $action_date3;?></td>
<td><?php echo $time_late3;?></td>
<td><?php echo $diffSeconds3;?> วินาที</td>
</tr>
</table>
</body>
</html>
เมื่อนำโค้ดไปรัน จะได้ผลลัพธ์ของโปรแกรมดังนี้
PHP CI MANIA - PHP Code Generator
โปรแกรมช่วยสร้างโค้ด ลดเวลาการเขียนโปรแกรม เขียนโปรแกรมง่ายและสะดวกขึ้น
สนใจสั่งซื้อราคาสุดคุ้ม >> http://fastcoding.phpcodemania.com/
ฟังก์ชั่นอ้างอิง (PHP)
DateTime::diff
http://php.net/manual/en/datetime.diff.php
DateTime::format
http://php.net/manual/en/datetime.format.php
DateTime::getTimestamp
http://php.net/manual/en/datetime.gettimestamp.php
DateTime::modify
http://php.net/manual/en/datetime.modify.php
ความคิดเห็น
แสดงความคิดเห็น