PHP Ionic Angular 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 สำหรับอ้างอิง