PHP Ionic Angularjs Phonegap AJAX Javascript CSS MySQL jQuery Forum


แนวทางการจัดรูปแบบข้อความวันที่ ให้อยู่ในรูปแบบมาตรฐาน ใน php

15 June 2017 By


เนื้อหาต่อไปนี้จะเป็นแนวทางรูปแบบต่างๆ ที่ใช้ในการจัดรูปแบบวันที่ ซึ่งเป็นรูปแบบที่เรา
กำหนดเอง หรือที่เราใช้งานแล้วมีความสะดวก เข้าใจง่าย แต่ไม่เหมาะสำหรับนำไปใช้งาน
ในการจัดการกับวันที่ร่วมกับข้อมูลอื่น
 
ตัวอย่างเช่น
 
// 2559-6-14
// 12 11 2560
// 31-1-2559
// 4/7/2016
// 14 มกราคม 2560
 
โดยแนวทางที่จะแนะนำ จะพูดถึงเฉพาะใช้งานกับวันที่ ส่วนการใช้งานร่วมกับเวลา ก็ใช้รูป
แบบเดียวกัน เพียงแค่เพิ่มตัวแปร ในการจัดการเพิ่มเติมเข้าไป
 
เล่นกับวันที่ ควรใช้รูปแบบมาตรฐาน คือ 
0000-00-00 วันที่อย่างเดียว ปี ค.ศ. เดือน และ วัน
0000-00-00 00:00:00 วันที่และเวลา ปี ค.ศ. เดือน และ วัน ชั่วโมง นาที วินาที
 
ถ้าข้อมูลที่จะใช้งานรูปแบบไม่ตรงตามด้านบน ให้ทำการปรับรูปแบบก่อนนำไปใช้งาน
เพราะถ้ารูปแบบไม่ถูกต้อง เวลามีการแปลงค่าเป็น timestamp ก็จะได้ค่าที่ไม่ถูกต้อง

 
 

แนวทางการแยกและจัดรูปแบบข้อความวันที่

เรามาดูว่ามีคำสั่งอะไรบ้าง ที่ใช้จัดการกับข้อความตามที่เราต้องการ
การคัดข้อความ เหมาะกับข้อความที่มีความยาวและตำแหน่งของข้อมูลคงที่ตายตัว เช่น 
// 2559-06-14
มีความยาวข้อความเท่ากับ 10 
เราสามารถใช้ฟังก์ชั่น substr() ได้ดังนี้
 
<?php
$strDate = "2559-06-14";
$Y = substr($strDate,0,4);
$Y = $Y-543;
$m = substr($strDate,5,2);
$d = substr($strDate,8,2);
$strDate_new = implode("-",array($Y,$m,$d));
echo $strDate_new;
?>
 
การแยกข้อความ เหมาะสำหรับข้อความที่มีตัวแบ่งข้อมูลชัดเจน ลักษณะการแสดงข้อมูลเป็นไปในรูปแบบ
เดียวกัน เช่น
 
// 2559-6-14
// 12 11 2560
// 31-1-2559
// 4/7/2016
// 14 มกราคม 2560
 
เราสามารถใช้ฟังก์ชั่น list() กับ explode() จัดการได้ดังนี้
 
// $strDate= "2559-6-14";
list($Y,$m,$d) = explode("-",$strDate);
// $strDate= "12 11 2560";
list($d,$m,$Y) = explode(" ",$strDate);
// $strDate= "31-1-2559";
list($d,$m,$Y) = explode("-",$strDate);
// $strDate= "4/7/2016";
list($d,$m,$Y) = explode("/",$strDate);
// $strDate= "14 มกราคม 2560"; 
list($d,$m,$Y) = explode(" ",$strDate);
 
คำสั่ง explode() เราจะใช้แยกข้อความตามตัวแบ่งที่เรากำหนด เป็นค่า array 
แล้วใช้คำสั่ง list() กำหนดตัวแปรไปรับค่า array แต่ละตัว ตามตำแหน่งที่ต้องการ
ขอยกตัวอย่างบางตัว มาอธิบายขยายให้เห็นภาพ การใช้ค่า array จากคำสั่ง explode()
 
// $strDate= "2559-6-14";
$arr_data = explode("-",$strDate); // แยกข้อความเป็น array ไว้ในตัวแปร $arr_data
// จากรูปแบบวันที่ และตัวแบ่งที่กำหนด เราจะได้ตัวแปร $arr_data มีสมาชิก 3 ค่า
// มี key เริ่มต้นที่ 0 และเราสามารถนำค่า array แต่ละค่าไปกำหนดให้กับตัวแปรตามต้องการได้
$Y = $arr_data[0];
$m = $arr_data[1];
$d = $arr_data[2];
 
// ซึ่งวิธีข้างต้น เราสามารถใช้คำสั่ง list() แทนได้ ตามที่ได้กล่าวมา ดังนี้ เป็นต้น
// list($Y,$m,$d) = explode("-",$strDate);
 
เมื่อเราได้ชุดข้อมูล ปี เดือน วัน มาแล้ว จะเห็นว่าบางค่า ก็ยังไม่สามารถนำมาใช้งานได้
ต้องจัดรูปแบบเพิ่มเข้าไปอีก เช่น
ถ้าปีเป็น พ.ศ. ก็ต้องเปลี่ยนเป็น ค.ศ. โดยลบด้วย 543
ถ้าเดือน หรือวันที่ ที่ได้เป็นค่า หลักเดียว เราก็ต้องจัดให้อยู่ในรูปแบบค่า สองหลัก มี 0 นำหน้า
กรณีเป็นค่าหลักเดียว ตัวอย่างเช่น 3 ก็ต้องเป็น 03 เป็นต้น
 
วิธีการจัดรูปแบบวันที่ หรือเดือนให้มี 0 นำหน้ากรณีมีค่าหลักเดียว สามารถใช้คำสั่ง
str_pad() หรือ sprintf() ได้ ตัวอย่าง
 
<?php
$m=3;
echo str_pad($m,2,"0",STR_PAD_LEFT); // 03
// หรือ 
echo sprintf("%'.02d",$m); // 03
?>
 
โดยค่าที่เป็นหลักเดียวจะถูกเติมเลข 0 เข้าไปด้านหน้า
ส่วนค่าที่มีสองหลักอยู่แล้ว ก็จะไม่เติมเลข 0 ด้านหน้า
 
แล้วสมมติค่าหลังจากที่แยกมาแล้ว เป็นข้อความ อย่างตัวอย่าง
 
// $strDate= "14 มกราคม 2560"; 
list($d,$m,$Y) = explode(" ",$strDate);
 
เราจะได้เดือน หรือ $m = "มกราคม" แบบนี้เราจะทำยังไงให้ได้ค่า $m=1 หรือ 01
วิธีการก็คือให้เราสร้างตัวแปร array สำหรับอ้างอิงค่าให้สอดคล้องกันดังนี้
จากนั้นใช้คำสั่ง array_search() หา key ของเดือนที่ตรง มาใช้งาน
 
<?php
// สมมติตัวแปร array เก็บเดือนภาษาไทยของเรามีลักษณะดังนี้
$thai_month_arr=array(   
    "0"=>"",   
    "1"=>"มกราคม",   
    "2"=>"กุมภาพันธ์",   
    "3"=>"มีนาคม",   
    "4"=>"เมษายน",   
    "5"=>"พฤษภาคม",   
    "6"=>"มิถุนายน",    
    "7"=>"กรกฎาคม",   
    "8"=>"สิงหาคม",   
    "9"=>"กันยายน",   
    "10"=>"ตุลาคม",   
    "11"=>"พฤศจิกายน",   
    "12"=>"ธันวาคม"                    
);   
$m="มกราคม";
$m = array_search($m, $thai_month_arr);// ค้นหา "มกราคม" ในตัวแปร $thai_month_arr
// แล้วคืนค่าเป็น key ของ array ที่มีค่าตรงกับข้อความที่เราค้นหา
echo $m; // เราจะได้ $m เท่ากับ 1 สามารถนำไปจัดรูปแบบโดยเติม 0 ด้านหน้าต่อได้
?>
 
เมื่อเราได้ค่าแต่ละส่วนแล้วต่อไปก็นำค่านั้นมารวมกัน หรือเชื่อมกันโดยใช้ตัวแบ่งเป็น (-)
เพื่อให้รูปแบบวันที่อยู่ในรูปแบบมาตรฐาน 0000-00-00
ซึ่งสามารถทำได้หลายวิธี เช่น
ใช้คำสั่ง implode()
 
$strDate_new = implode("-",array($Y,$m,$d));
 
หรือเชื่อม string ตัวแปร
 
$strDate_new = "$Y-$m-$d"; // แบบนี้ก็ได้
 
 

แนวทางการสร้างฟังก์ชั่นจัดรูปแบบวันที่

ต่อไปเรามาดูแนวทาง ก็สร้างฟังก์ชั่นจัดรูปแบบข้อความ เพื่อเป็นไอเดียหรือวิธีทาง
สมมติ ข้อความเราเป็น
2559-6-14 (*เป็นรูปแบบการจัดเก็บวันที่ที่ไม่แนะนำ)
เราต้องการเปลี่ยนให้เป็น 0000-00-00
 
แนวทางสร้างโค้ดทดสอบก่อนสร้างฟังก์ชั่น
 
<?php
$strDate = "2559-6-14";
list($Y,$m,$d) = explode("-",$strDate); // แยกข้อความด้วยตัวแบ่ง
$Y = $Y-543; // จัดรูปแบบปีเป็น ค.ศ. ลบ 543
$m = sprintf("%'.02d",$m); // จัดรูปแบบเดือน 00
$d = sprintf("%'.02d",$d); // จัดรูปแบบวัน 00
$strDate_new = implode("-",array($Y,$m,$d));
// $strDate_new = "$Y-$m-$d"; // แบบนี้ก็ได้
echo $strDate_new; // จะได้เป็น 2016-06-14
?>
 
จากวิธีการจัดรูปแบบที่เราได้ ต่อไปก็สร้างฟังก์ชั่น เช่นฟังก์ชั่นเราชื่อ mydate
การทำงานของฟังก์ชั่นของเราคือ ส่งค่าเข้าไป จัดรูปแบบ และส่งค่ากลับคืนมา
รูปแบบอย่างง่ายคือ
 
function mydate(// ตัวแปรที่รับค่า){
    return // ตัวแปรที่ส่งค่ากลับ   
}
 
เอาวิธีการจัดรูปแบบมาใส่ในฟังก์ชั่นของเรา
 
function mydate(// ตัวแปรที่รับค่า){
    $strDate = "2559-6-14";
    list($Y,$m,$d) = explode("-",$strDate); // แยกข้อความด้วยตัวแบ่ง
    $Y = $Y-543; // จัดรูปแบบปีเป็น ค.ศ. ลบ 543
    $m = sprintf("%'.02d",$m); // จัดรูปแบบเดือน 00
    $d = sprintf("%'.02d",$d); // จัดรูปแบบวัน 00
    $strDate_new = implode("-",array($Y,$m,$d));
    // $strDate_new = "$Y-$m-$d"; // แบบนี้ก็ได้
    echo $strDate_new; // จะได้เป็น 2016-06-14    
    return // ตัวแปรที่ส่งค่ากลับ   
}
 
ปรับฟังก์ชั่นให้สมบูรณ์
 
function mydate($strDate){
    list($Y,$m,$d) = explode("-",$strDate); // แยกข้อความด้วยตัวแบ่ง
    $Y = $Y-543; // จัดรูปแบบปีเป็น ค.ศ. ลบ 543
    $m = sprintf("%'.02d",$m); // จัดรูปแบบเดือน 00
    $d = sprintf("%'.02d",$d); // จัดรูปแบบวัน 00
    $strDate_new = implode("-",array($Y,$m,$d));
    // $strDate_new = "$Y-$m-$d"; // แบบนี้ก็ได้
    return $strDate_new; // ตัวแปรที่ส่งค่ากลับ   
}
 
ทดสอบเรียกใช้งานฟังก์ชั่น
 
<?php
echo mydate("2560-3-8"); // จะได้ค่าเป็น 2017-03-08
// หรือถ้าใช้ค่าจากตัวแปร ก็จะได้เป็น
$my_strDate="2560-3-8";
echo mydate($my_strDate); // จะได้ค่าเป็น 2017-03-08
?>
 
เราก็ได้รูปแบบฟังก์ชั่นจัดรูปแบบวันที่ให้เป็นมาตรฐานพร้อมนำไปประยุกต์ใช้งาน
 
สมมติเราประยุกต์ใช้งาน กับฟังก์ชั่น แสดงวันที่ ภาษาไทย ตามบทความด้านล่างนี้
 
สร้างฟังก์ชั่น แสดงวันที่ ภาษาไทย ด้วย php อย่างง่าย 
http://www.ninenik.com/content.php?arti_id=459 via @ninenik
 
ยกตัวอย่างการใช้งานและฟักง์ชั่นทีเกี่ยวข้องบางส่วน
จะได้เป็น
 
<?php
$thai_month_arr=array(   
    "0"=>"",   
    "1"=>"มกราคม",   
    "2"=>"กุมภาพันธ์",   
    "3"=>"มีนาคม",   
    "4"=>"เมษายน",   
    "5"=>"พฤษภาคม",   
    "6"=>"มิถุนายน",    
    "7"=>"กรกฎาคม",   
    "8"=>"สิงหาคม",   
    "9"=>"กันยายน",   
    "10"=>"ตุลาคม",   
    "11"=>"พฤศจิกายน",   
    "12"=>"ธันวาคม"                    
);    
function thai_date_and_time($time){   // 19 ธันวาคม 2556 เวลา 10:10:43
    global $thai_month_arr;   
    $thai_date_return=date("j",$time);   
    $thai_date_return.=" ".$thai_month_arr[date("n",$time)];   
    $thai_date_return.= " ".(date("Y",$time)+543);   
    $thai_date_return.= " เวลา ".date("H:i:s",$time);
    return $thai_date_return;   
} 
function mydate($strDate){
    list($Y,$m,$d) = explode("-",$strDate); // แยกข้อความด้วยตัวแบ่ง
    $Y = $Y-543; // จัดรูปแบบปีเป็น ค.ศ. ลบ 543
    $m = sprintf("%'.02d",$m); // จัดรูปแบบเดือน 00
    $d = sprintf("%'.02d",$d); // จัดรูปแบบวัน 00
    $strDate_new = implode("-",array($Y,$m,$d));
    // $strDate_new = "$Y-$m-$d"; // แบบนี้ก็ได้
    return $strDate_new; // ตัวแปรที่ส่งค่ากลับ   
}
?>
<?php
//////////// การใช้งาน
$my_strDate="2560-3-8";
$strDate=mydate($my_strDate);
echo thai_date_and_time(strtotime($strDate)); // 8 มีนาคม 2560 เวลา 10:10:43
?>
 
สามารถนำไปปรับแต่ง ให้กระชับหรือประยุกต์เพิ่มเติมได้
 








เนื้อหาที่เกี่ยวข้อง



Tags::






อย่าลืมกด Like กด Share เป็นกำลังใจ ในการสร้างบทความใหม่ๆ น่ะครับ


URL สำหรับอ้างอิง