รูปแบบที่ถูกต้องในการส่งผ่านไปยังdate()
ฟังก์ชันใน PHP คืออะไรถ้าฉันต้องการแทรกผลลัพธ์ลงในdatetime
คอลัมน์ประเภทMySQL ?
ฉันพยายามแล้วdate("Y-M-D G:i:s")
แต่ก็แค่แทรก "0000-00-00 00:00:00" ทุกครั้ง
รูปแบบที่ถูกต้องในการส่งผ่านไปยังdate()
ฟังก์ชันใน PHP คืออะไรถ้าฉันต้องการแทรกผลลัพธ์ลงในdatetime
คอลัมน์ประเภทMySQL ?
ฉันพยายามแล้วdate("Y-M-D G:i:s")
แต่ก็แค่แทรก "0000-00-00 00:00:00" ทุกครั้ง
คำตอบ:
ปัญหาคือว่าคุณกำลังใช้'M'
และ'D'
ซึ่งเป็นตัวแทนข้อความต้นฉบับ, MySQL คาดว่าจะเป็นตัวแทนของรูปแบบตัวเลข2010-02-06 19:30:13
ลอง: date("Y-m-d H:i:s")
ซึ่งใช้การเทียบเท่าตัวเลข
แก้ไข: เปลี่ยนG
เป็นH
แม้ว่ามันอาจจะไม่มีผลกระทบ แต่คุณอาจต้องการใช้รูปแบบ 24 ชั่วโมงกับ 0 ส่วนนำ
จากความคิดเห็นของdate()
หน้าคู่มือของ php :
<?php $mysqltime = date ("Y-m-d H:i:s", $phptime); ?>
คุณได้คำว่า 'Y' ถูกต้อง - นั่นคือตลอดทั้งปี แต่ 'M' คือเดือนสามตัวอักษรในขณะที่ 'm' คือเดือนสองหลัก ปัญหาเดียวกันกับ 'D' แทนที่จะเป็น 'd' 'G' คือ 1 หรือ 2 หลักชั่วโมงโดยที่ 'H' จะมี 0 นำหน้าเสมอเมื่อต้องการ
ต่อไปนี้เป็นทางเลือกอื่น: หากคุณมีวันที่ใน PHP เป็น timestamp ให้ข้ามการจัดการกับ PHP และปล่อยให้ DB ดูแลการแปลงโดยใช้FROM_UNIXTIME
ฟังก์ชัน
mysql> insert into a_table values(FROM_UNIXTIME(1231634282));
Query OK, 1 row affected (0.00 sec)
mysql> select * from a_table;
+---------------------+
| a_date |
+---------------------+
| 2009-01-10 18:38:02 |
+---------------------+
ฉันใช้โค้ด PHP ต่อไปนี้เพื่อสร้างตัวแปรที่ฉันใส่ลงในคอลัมน์ MySQL DATETIME
$datetime = date_create()->format('Y-m-d H:i:s');
สิ่งนี้จะเก็บวันที่และเวลาปัจจุบันของเซิร์ฟเวอร์
$date_old = '23-5-2016 23:15:23';
//Date for database
$date_for_database = date ("Y-m-d H:i:s", strtotime($date_old));
//Format should be like 'Y-m-d H:i:s'`enter code here`
จัดรูปแบบการประทับเวลาให้กับคอลัมน์ MySQL DATETIME:
strftime('%Y-%m-%d %H:%M:%S',$timestamp);
ฟอร์แมต MySQL datetime ด้วย PHP
$date = "'".date('Y-m-d H:i:s', strtotime(str_replace('-', '/', $_POST['date'])))."'";
ฉันใช้ฟังก์ชั่นนี้ (PHP 7)
function getDateForDatabase(string $date): string {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
PHP เวอร์ชันเก่ากว่า (PHP <7)
function getDateForDatabase($date) {
$timestamp = strtotime($date);
$date_formated = date('Y-m-d H:i:s', $timestamp);
return $date_formated;
}
function getDateForDatabase(string $date) : string {
ไปfunction getDateForDatabase($date) {
ทำไมการประกาศประเภทโยนความผิดพลาดผมไม่ทราบว่าพอจะบอก PHP
ไม่จำเป็นต้องใช้เมธอด date () จาก PHP หากคุณไม่ได้ใช้การประทับเวลา หากdateposted
เป็นคอลัมน์วันที่และเวลาคุณสามารถแทรกวันที่ปัจจุบันดังนี้
$db->query("INSERT INTO table (dateposted) VALUES (now())");
นี่ทำให้ฉันคลั่งไคล้หาคำตอบง่ายๆ ในที่สุดฉันก็ทำฟังก์ชั่นนี้ซึ่งดูเหมือนว่าจะจับอินพุตทั้งหมดและให้สตริง SQL ที่ดีที่ถูกต้องหรืออย่างน้อยก็ใช้ได้และตรวจสอบได้ ถ้ามันคือ 1999-12-31 มันอาจจะผิด แต่จะไม่เกิดข้อผิดพลาดใน MySQL
function MakeSQLDate($date) {
if (is_null($date)) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
}
if (($t = strtotime($date)) === false) {
//use 1999-12-31 as a valid date or as an alert
return date('Y-m-d', strtotime('1999-12-31'));
} else {
return date('Y-m-d H:i:s', strtotime($date));
}
}
ใช้DateTime
คลาสใน PHP7 +:
function getMysqlDatetimeFromDate(int $day, int $month, int $year): string {
$dt = new DateTime();
$dt->setTimezone(new DateTimeZone('UTC'));
$dt->setDate($year, $month, $day);
$dt->setTime(0, 0, 0, 0); // set tine to midnight
return $dt->format("Y-m-d H:i:s");
}
ภาคผนวกขนาดเล็กที่จะได้รับการยอมรับคำตอบ: ถ้าฐานข้อมูลdatetime
จะถูกเก็บเป็น UTC (สิ่งที่ฉันเคยทำ) คุณควรใช้แทนgmdate("Y-m-d H:i:s")
date("Y-m-d H:i:s")
หรือถ้าคุณต้องการให้ MySQL จัดการทุกอย่างตามที่คำตอบบางข้อเสนอแนะฉันจะแทรก MySQL UTC_TIMESTAMP
ด้วยผลลัพธ์เดียวกัน
หมายเหตุ: ฉันเข้าใจคำถามที่อ้างถึงเวลาปัจจุบัน
นี่เป็นวิธีที่แม่นยำกว่าในการทำ มันวางทศนิยมหลังวินาทีให้ความแม่นยำมากขึ้น
$now = date('Y-m-d\TH:i:s.uP', time());
.uP
แจ้งให้ทราบล่วงหน้า
ข้อมูลเพิ่มเติม: https://stackoverflow.com/a/6153162/8662476