พื้นฐาน
วิธี Simplist การแปลงรูปแบบวันที่หนึ่งไปยังอีกที่จะใช้กับstrtotime()
จะแปลงวันเป็นเวลา Unix Unix Timestamp นั้นสามารถส่งผ่านไปยังการแปลงเป็นรูปแบบใหม่date()
strtotime()
date()
$timestamp = strtotime('2008-07-01T22:35:17.02');
$new_date_format = date('Y-m-d H:i:s', $timestamp);
หรือเป็นหนึ่งซับ:
$new_date_format = date('Y-m-d H:i:s', strtotime('2008-07-01T22:35:17.02'));
เก็บไว้ในใจว่าstrtotime()
ต้องมีวันที่จะอยู่ในรูปแบบที่ถูกต้อง การไม่ระบุรูปแบบที่ถูกต้องจะส่งผลให้มีการstrtotime()
คืนค่าเท็จซึ่งจะทำให้วันของคุณเป็น 1969-12-31
การใช้ DateTime()
ในฐานะของ PHP 5.2, PHP เสนอDateTime()
คลาสที่ให้เครื่องมือที่มีประสิทธิภาพมากขึ้นสำหรับการทำงานกับวันที่ (และเวลา) เราสามารถเขียนโค้ดข้างต้นโดยใช้DateTime()
ดังนี้:
$date = new DateTime('2008-07-01T22:35:17.02');
$new_date_format = $date->format('Y-m-d H:i:s');
ทำงานกับเวลา Unix
date()
ใช้เวลากับยูนิกซ์ timeatamp เป็นพารามิเตอร์ตัวที่สองและส่งคืนวันที่จัดรูปแบบสำหรับคุณ:
$new_date_format = date('Y-m-d H:i:s', '1234567890');
DateTime () ทำงานร่วมกับ Unix Timestamps โดยเพิ่ม@
ก่อนประทับเวลา:
$date = new DateTime('@1234567890');
$new_date_format = $date->format('Y-m-d H:i:s');
หากการประทับเวลาคุณมีหน่วยเป็นมิลลิวินาที (อาจสิ้นสุด000
และ / หรือการประทับเวลามีความยาวสิบสามอักขระ) คุณจะต้องแปลงเป็นวินาทีก่อนที่คุณจะสามารถแปลงเป็นรูปแบบอื่นได้ มีสองวิธีในการทำสิ่งนี้:
การตัดสามหลักสุดท้ายสามารถทำได้หลายวิธี แต่การใช้substr()
นั้นง่ายที่สุด:
$timestamp = substr('1234567899000', -3);
คุณสามารถแปลงการประทับเวลาเป็นวินาทีโดยการหารด้วย 1,000 เนื่องจากการประทับเวลามีขนาดใหญ่เกินไปสำหรับระบบ 32 บิตที่จะทำคณิตศาสตร์คุณจะต้องใช้ไลบรารีBCMathเพื่อทำคณิตศาสตร์เป็นสตริง:
$timestamp = bcdiv('1234567899000', '1000');
ในการรับ Unix Timestamp คุณสามารถใช้strtotime()
ซึ่งคืนค่า Unix Timestamp:
$timestamp = strtotime('1973-04-18');
ด้วย DateTime () คุณสามารถใช้ DateTime::getTimestamp()
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->getTimestamp();
หากคุณใช้ PHP 5.2 คุณสามารถใช้U
ตัวเลือกการจัดรูปแบบแทน:
$date = new DateTime('2008-07-01T22:35:17.02');
$timestamp = $date->format('U');
การทำงานกับรูปแบบวันที่ที่ไม่ได้มาตรฐานและไม่ชัดเจน
น่าเสียดายที่ไม่ใช่ทุกวันที่ผู้พัฒนาต้องทำงานด้วยอยู่ในรูปแบบมาตรฐาน โชคดีที่ PHP 5.3 ให้วิธีการแก้ปัญหาแก่เรา DateTime::createFromFormat()
ช่วยให้เราสามารถบอก PHP ว่ารูปแบบสตริงวันที่อยู่ในนั้นจึงสามารถแยกเป็นวัตถุ DateTime ประสบความสำเร็จสำหรับการจัดการต่อไป
$date = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM');
$new_date_format = $date->format('Y-m-d H:i:s');
ใน PHP 5.4 เราได้เพิ่มความสามารถในการเข้าถึงสมาชิกของคลาสในการสร้างอินสแตนซ์ซึ่งช่วยให้เราสามารถเปลี่ยนDateTime()
รหัสของเราให้เป็นซับไลน์เดียว:
$new_date_format = (new DateTime('2008-07-01T22:35:17.02'))->format('Y-m-d H:i:s');
$new_date_format = DateTime::createFromFormat('F-d-Y h:i A', 'April-18-1973 9:48 AM')->format('Y-m-d H:i:s');