Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> PHP

PHP เปลี่ยนรูปแบบวันที่ (Date Format)

ตัวอย่างโค้ด

<?php
function string_convert($my_date) {
    $sec = strtotime($my_date);
    $my_date = date("Y-m-d H:i", $sec);
    $my_date = $my_date . ":00";
    echo $my_date;
}

$my_date = "23/11/2020 11:59 PM";
string_convert($my_date);
?>

ผลลัพธ์

1970-01-01 00:00:00

ปัญหาและการแก้ไข

ปัญหา: รูปแบบวันที่ 23/11/2020 11:59 PM ไม่ใช่รูปแบบมาตรฐานที่ strtotime() Parse ได้ถูกต้อง (US Format: mm/dd/yyyy)

แก้ไข: ใช้ DateTime::createFromFormat() ระบุ Format ชัดเจน:

<?php
function string_convert($my_date) {
    $dt = DateTime::createFromFormat('d/m/Y h:i A', $my_date);
    if ($dt === false) {
        echo "Invalid date format";
        return;
    }
    echo $dt->format("Y-m-d H:i:s");
}

$my_date = "23/11/2020 11:59 PM";
string_convert($my_date);
?>

ผลลัพธ์ที่ถูกต้อง

2020-11-23 23:59:00

รูปแบบวันที่ที่ strtotime() รองรับดี

  • YYYY-MM-DD (ISO 8601)
  • YYYY-MM-DD HH:MM:SS
  • MM/DD/YYYY (US Format)
  • DD-MM-YYYY (European - อาจสับสนกับ US)

Best Practice

  • ใช้ DateTime::createFromFormat() สำหรับ Input Formats ที่แน่นอน
  • เก็บวันที่ใน Database เป็น DATETIME หรือ TIMESTAMP (UTC)
  • แสดงผลด้วย DateTime::format() ตาม Locale ของ User
  • หลีกเลี่ยง strtotime() กับ Ambiguous Formats