Như đã nêu trong Chữ viết theo ngày và giờ :
MySQL nhận dạng
DATE
giá trị ở các định dạng sau:
Dưới dạng một chuỗi trong
'YYYY-MM-DD'
hoặc'YY-MM-DD'
định dạng. Cho phép cú pháp "thoải mái":Bất kỳ ký tự dấu câu nào cũng có thể được sử dụng làm dấu phân cách giữa các phần ngày tháng. Ví dụ:'2012-12-31'
,'2012/12/31'
,'2012 ^ 12 ^ 31'
và' [email protected] @ 31 '
tương đương.Là một chuỗi không có dấu phân tách trong
'YYYYMMDD'
hoặc'YYMMDD'
, miễn là chuỗi có ý nghĩa như một ngày tháng. Ví dụ:'20070523'
và'070523'
được hiểu là'2007-05-23'
, nhưng'071332'
là bất hợp pháp (nó có các phần tháng và ngày vô nghĩa) và trở thành'0000-00-00'
.Dưới dạng một số trong
YYYYMMDD
hoặcYYMMDD
định dạng, miễn là con số có ý nghĩa như một ngày tháng. Ví dụ:19830905
và830905
được hiểu là'1983-09-05'
.
Do đó, chuỗi '08 / 25/2012 '
không phải là một nghĩa đen ngày MySQL hợp lệ. Bạn có bốn tùy chọn (theo một số thứ tự tùy chọn mơ hồ, không có thêm bất kỳ thông tin nào về yêu cầu của bạn):
-
Định cấu hình Datepicker để cung cấp ngày ở định dạng được hỗ trợ bằng cách sử dụng
altField
cùng vớialtFormat
của nó tùy chọn :<input type="hidden" id="actualDate" name="actualDate"/>
$( "selector" ).datepicker({ altField : "#actualDate" altFormat: "yyyy-mm-dd" });
Hoặc, nếu bạn vui lòng cho người dùng xem ngày trong
YYYY-MM-DD
định dạng, chỉ cần đặtdateFormat
tùy chọn thay vào đó:$( "selector" ).datepicker({ dateFormat: "yyyy-mm-dd" });
-
Sử dụng
STR_TO_DATE ( )
hàm để chuyển đổi chuỗi:INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
-
Chuyển đổi chuỗi nhận được từ jQuery thành chuỗi mà PHP hiểu là ngày tháng, chẳng hạn như
DateTime
đối tượng:$dt = \DateTime::createFromFormat('m/d/Y', $_POST['date']);
và sau đó:
-
lấy một chuỗi có định dạng phù hợp:
$date = $dt->format('Y-m-d');
-
lấy dấu thời gian UNIX:
$timestamp = $dt->getTimestamp();
sau đó được chuyển trực tiếp đến
FROM_UNIXTIME () chức năng:INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
-
-
Thao tác thủ công chuỗi thành một ký tự hợp lệ:
$parts = explode('/', $_POST['date']); $date = "$parts[2]-$parts[0]-$parts[1]";
Cảnh báo
-
Mã của bạn dễ bị chèn SQL. Bạn thực sự nên sử dụng câu lệnh chuẩn bị , vào đó bạn chuyển các biến của mình dưới dạng các tham số không được đánh giá cho SQL. Nếu bạn không biết tôi đang nói gì hoặc cách khắc phục, hãy đọc câu chuyện về Bàn Bobby .
-
Ngoài ra, như đã nêu trong phần giới thiệu đến chương hướng dẫn sử dụng PHP trên
mysql_ *
chức năng:Tiện ích mở rộng này không được dùng nữa kể từ PHP 5.5.0 và không được khuyến nghị để viết mã mới vì nó sẽ bị xóa trong tương lai. Thay vào đó, mysqli hoặc PDO_MySQL phần mở rộng nên được sử dụng. Xem thêm Tổng quan về API MySQL để được trợ giúp thêm khi chọn MySQL API.
-
Có vẻ như bạn đang sử dụng
DATETIME
hoặcTIMESTAMP
cột để giữ giá trị ngày tháng; Tôi khuyên bạn nên cân nhắc sử dụngDATE
của MySQL gõ thay thế. Như đã giải thích trongDATE
,DATETIME
vàTIMESTAMP
Các loại :DATE
kiểu được sử dụng cho các giá trị có phần ngày nhưng không có phần thời gian. MySQL truy xuất và hiển thị các giá trị DATE trong'YYYY-MM-DD'
định dạng. Phạm vi được hỗ trợ là'1000-01-01'
thành'9999-12-31'
.DATETIME
kiểu được sử dụng cho các giá trị chứa cả phần ngày và giờ. MySQL truy xuất và hiển thịDATETIME
các giá trị trong'YYYY-MM-DD HH:MM:SS'
định dạng. Phạm vi được hỗ trợ là'1000-01-01 00:00:00'
tới'9999-12-31 23:59:59'
.TIMESTAMP
kiểu dữ liệu được sử dụng cho các giá trị chứa cả phần ngày và giờ.TIMESTAMP
có phạm vi'1970-01-01 00:00:01'
UTC đến'2038-01-19 03:14:07'
UTC.