Hướng dẫn dùng str_to_datetime mysql trong PHP

Trong bài này mình sẽ hướng dẫn cách sử dụng hàm STR_TO_DATE trong MySQL thông qua cú pháp và ví dụ thực tế.

Hướng dẫn dùng str_to_datetime mysql trong PHP

Hướng dẫn dùng str_to_datetime mysql trong PHP

Bài viết này được đăng tại freetuts.net, không được copy dưới mọi hình thức.

1. Mô tả

Hàm STR_TO_DATE lấy một chuỗi và trả về một ngày được chỉ định bởi mặt nạ định dạng.

2. Cú pháp

Cú pháp của hàm STR_TO_DATE trong MySQL là:

STR_TO_DATE( string, format_mask )

Trong đó:

Bài viết này được đăng tại [free tuts .net]

  • string: Giá trị chuỗi để định dạng là một ngày.
  • format_mask: Các định dạng để áp dụng cho string. Sau đây là danh sách các tùy chọn cho tham số format_mask. Các tham số này có thể được sử dụng trong nhiều kết hợp
Giá trị Mô tả
%a Viết tắt tên ngày trong tuần (Sun - Sat)
%b Viết tắt tên tháng (Jan đến Dec)
%c Tháng dưới dạng giá trị số (0 đến 12)
%D Ngày trong tháng dưới dạng giá trị số, theo sau là hậu tố (1st, 2nd, 3rd, ...)
%d Ngày trong tháng dưới dạng giá trị số (01 đến 31)
%e Ngày trong tháng dưới dạng giá trị số (1 đến 31)
%f Giây (000000 đến 999999)
%H Hour (00 đến 23)
%h hoặc %l Giờ (00 đến 12)
%i Phút (00 đến 59)
%j Ngày trong năm (001 đến 366)
%k Giờ (00 đến 23)
%l Giờ (1 đến 12)
%M Tên tháng đầy đủ (January đến December)
%m Tên tháng dưới dạng giá trị số (00 đến 12)
%p AM hoặc PM
%r Thời gian ở định dạng 12 giờ AM hoặc PM (hh: mm: ss AM / PM)
%S Giây (00 đến 59)
%s Giây (00 đến 59)
%T Thời gian ở định dạng 24 giờ (hh: mm: ss)
%U Tuần mà Chủ nhật là ngày đầu tuần (00 đến 53)
%u Tuần mà thứ Hai là ngày đầu tuần (00 đến 53)
%V Tuần mà Chủ nhật là ngày đầu tuần (01 đến 53)
%v Tuần mà thứ Hai là ngày đầu tuần (01 đến 53)
%W Tên ngày trong tuần đầy đủ (Sunday đến Saturday)
%w Ngày trong tuần trong đó Chủ nhật = 0 và Thứ bảy = 6
%X Năm trong tuần mà Chủ nhật là ngày đầu tuần
%x Năm trong tuần, thứ Hai là ngày đầu tuần
%Y Năm dưới dạng giá trị số, 4 chữ số
%y Năm dưới dạng giá trị số, 2 chữ số

Lưu ý:

  • Hàm STR_TO_DATE sẽ trả về giá trị ngày giờ, nếu chuỗi chứa cả phần ngày và thời gian hợp lệ.
  • Hàm STR_TO_DATE sẽ trả về giá trị ngày, nếu chuỗi chỉ chứa các phần ngày hợp lệ.
  • Hàm STR_TO_DATE sẽ trả về giờ, nếu chuỗi chỉ chứa các phần giờ hợp lệ.
  • Hàm STR_TO_DATE sẽ trả về giá trị NULL, nếu nó không thể trích xuất các phần ngày và giờ hợp lệ bằng cách sử dụng format_mask.

3. Version

Hàm STR_TO_DATE có thể được sử dụng trong các phiên bản sau của MySQL:

  • MySQL 5.7, MySQL 5.6, MySQL 5.5, MySQL 5.1, MySQL 5.0, MySQL 4.1, MySQL 4.0, MySQL 3.23

4. Ví dụ

mysql> SELECT STR_TO_DATE('February 05 2019', '%M %d %Y');
Ket qua: '2019-02-05'

mysql> SELECT STR_TO_DATE('March,9,2019', '%M,%e,%Y');
Ket qua: '2019-03-09'

mysql> SELECT STR_TO_DATE('Friday, February 20, 2019', '%W, %M %e, %Y');
Ket qua: '2019-02-20'

mysql> SELECT STR_TO_DATE('2019,5,25 08', '%Y,%m,%d %h');
Ket qua: '2019-05-25 08:00:00'

mysql> SELECT STR_TO_DATE('2019,3,27 02,30,05', '%Y,%m,%d %h,%i,%s');
Ket qua: '2019-03-27 02:30:05'

mysql> SELECT STR_TO_DATE('11,10,35', '%h,%i,%s');
Ket qua: 'NULL'

Tôi đang sử dụng jQuery datepicker, định dạng của datepicker là cái này 08/25/2012

tôi gặp lỗi khi chèn vào cơ sở dữ liệu của mình, nó chỉ chèn 0000-00-00 00 00 00

mã của tôi là


Tôi chắc chắn rằng phụ trang của tôi là chính xác ...

  • php
  • mysql
  • date
  • insert

59 hữu ích 1 bình luận 348k xem chia sẻ

answer

178

Hướng dẫn dùng str_to_datetime mysql trong PHP

Như đã nêu trong Chữ viết ngày và giờ :

MySQL nhận ra DATEcác giá trị trong các định dạng sau:

  • Dưới dạng một chuỗi ở một trong hai '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à '2012@12@31'là tương đương.

  • Là một chuỗi không có dấu phân cách ở một trong hai 'YYYYMMDD'hoặc 'YYMMDD'định dạng, với điều kiện là chuỗi có ý nghĩa như một ngày tháng. Ví dụ, '20070523''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'.

  • Là một số ở một trong hai YYYYMMDDhoặc YYMMDDđịnh dạng, miễn là số đó có ý nghĩa như một ngày tháng. Ví dụ, 19830905830905được hiểu là '1983-09-05'.

Do đó, chuỗi '08/25/2012'không phải là một ký tự 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ó bất kỳ thông tin nào khác về yêu cầu của bạn):

  1. Định cấu hình Datepicker để cung cấp ngày ở định dạng được hỗ trợ bằng cách sử dụng altFieldcùng với altFormattùy chọn của nó :

    
    
    $( "selector" ).datepicker({
        altField : "#actualDate"
        altFormat: "yyyy-mm-dd"
    });
    

    Hoặc, nếu bạn hài lòng khi người dùng thấy ngày ở YYYY-MM-DDđịnh dạng, chỉ cần đặt dateFormattùy chọn thay thế:

    $( "selector" ).datepicker({
        dateFormat: "yyyy-mm-dd"
    });
    
  2. Sử dụng STR_TO_DATE()hàm của MySQL để chuyển đổi chuỗi:

    INSERT INTO user_date VALUES ('', '$name', STR_TO_DATE('$date', '%m/%d/%Y'))
    
  3. Chuyển đổi chuỗi nhận được từ jQuery thành một thứ 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()hàm của MySQL :

      INSERT INTO user_date VALUES ('', '$name', FROM_UNIXTIME($timestamp))
      
  4. 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

  1. Mã của bạn dễ bị chèn SQL. Bạn thực sự nên sử dụng các câu lệnh đã chuẩn bị sẵn , trong đó 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 về điều gì, hoặc làm thế nào để sửa chữa nó, hãy đọc câu chuyện về Bobby Tables .

  2. Ngoài ra, như đã nêu trong phần giới thiệu chương hướng dẫn sử dụng PHP về các mysql_*hàm:

    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 đó, nên sử dụng phần mở rộng mysqli hoặc PDO_MySQL . Xem thêm Tổng quan về API MySQL để được trợ giúp thêm khi chọn API MySQL.

  3. Có vẻ như bạn đang sử dụng một DATETIMEhoặc TIMESTAMPcột để giữ giá trị ngày tháng; Tôi khuyên bạn nên xem xét sử dụng loại MySQL DATEthay thế. Như đã giải thích trong Các DATE, DATETIMETIMESTAMPloại :

    Các DATEloại được sử dụng cho các giá trị với một phần ngày nhưng không có bán thời gian. MySQL truy xuất và hiển thị các giá trị DATE theo 'YYYY-MM-DD'định dạng. Phạm vi được hỗ trợ là '1000-01-01'để '9999-12-31'.

    Các DATETIMEloại được sử dụng cho các giá trị có chứa cả ngày và các bộ phận thời gian. MySQL truy xuất và hiển thị DATETIMEcác giá trị theo 'YYYY-MM-DD HH:MM:SS'định dạng. Phạm vi được hỗ trợ là '1000-01-01 00:00:00'để '9999-12-31 23:59:59'.

    Kiểu TIMESTAMPdữ liệu được sử dụng cho các giá trị chứa cả phần ngày và giờ. TIMESTAMPcó một loạt các '1970-01-01 00:00:01'UTC đến '2038-01-19 03:14:07'UTC.

178 hữu ích 0 bình luận chia sẻ

answer

10

Hướng dẫn dùng str_to_datetime mysql trong PHP

Bạn nên cân nhắc tạo dấu thời gian từ ngày đó với mktime ()

ví dụ:

$date = explode('/', $_POST['date']);
$time = mktime(0,0,0,$date[0],$date[1],$date[2]);
$mysqldate = date( 'Y-m-d H:i:s', $time );

10 hữu ích 0 bình luận chia sẻ

answer

8

Hướng dẫn dùng str_to_datetime mysql trong PHP

$date_field         = date('Y-m-d',strtotime($_POST['date_field']));
$sql = mysql_query("INSERT INTO user_date (column_name,column_name,column_name) VALUES('',$name,$date_field)") or die (mysql_error());

8 hữu ích 2 bình luận chia sẻ

answer

1

Hướng dẫn dùng str_to_datetime mysql trong PHP

Bạn phải đảm bảo rằng định dạng ngày là YYYY-MM-DD trên đầu ra jQuery của bạn. Tôi có thể thấy jQuery trả về MM-DD-YYYY, đây không phải là định dạng ngày MySQL hợp lệ và đây là lý do tại sao nó trả về lỗi.

Để chuyển đổi nó thành đúng, bạn có thể làm như sau:

$dateFormated = split('/', $date);
$date = $dateFormated[2].'-'.$dateFormated[0].'-'.$dateFormated[1];

Sau đó, bạn sẽ nhận được ngày được định dạng sẽ là định dạng MySQL hợp lệ, đó là YYYY-MM-DD, tức là 2012-08-25

Tôi cũng khuyên bạn nên sử dụng mysql_real_escape_string khi bạn chèn dữ liệu vào cơ sở dữ liệu để ngăn chặn việc tiêm SQL như một giải pháp nhanh chóng hoặc tốt hơn là sử dụng PDO hoặc MySQLi .

Truy vấn chèn của bạn bằng cách sử dụng mysql_real_escape_stringsẽ giống như sau:

$sql = mysql_query( "INSERT INTO user_date VALUE( '', '" .mysql_real_escape_string($name). "', '" .mysql_real_escape_string($date). "'" ) or die ( mysql_error() );

1 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng str_to_datetime mysql trong PHP

Phương pháp đơn giản nhất là

$dateArray = explode('/', $_POST['date']);
$date = $dateArray[2].'-'.$dateArray[0].'-'.$dateArray[1];

$sql = mysql_query("INSERT INTO user_date (column,column,column) VALUES('',$name,$date)") or die (mysql_error());

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng str_to_datetime mysql trong PHP

Lấy một đối tượng ngày tháng từ bộ chọn ngày jquery bằng cách sử dụng

var myDate = $('element').datepicker('getDate')

Đối với mysql, ngày cần phải ở định dạng thích hợp. Một tùy chọn xử lý mọi vấn đề về múi giờ là sử dụng moment.js

moment(myDate).format('YYYY-MM-DD HH:mm:ss')

0 hữu ích 0 bình luận chia sẻ

answer

0

Hướng dẫn dùng str_to_datetime mysql trong PHP

HTML:

id="pt_date" name="pt_date">

SQL

$pt_date = $_POST['pt_date'];

$sql = "INSERT INTO `table` ( `pt_date`) VALUES ( '$pt_date')";

0 hữu ích 2 bình luận chia sẻ

answer

-2

Hướng dẫn dùng str_to_datetime mysql trong PHP

Hãy thử một cái gì đó như thế này ..

echo "The time is " . date("2:50:20");
$d=strtotime("3.00pm july 28 2014");
echo "Created date is " . date("d-m-y h:i:sa",$d);

-2 hữu ích 0 bình luận chia sẻ

answer

-2

Hướng dẫn dùng str_to_datetime mysql trong PHP

Trước hết cửa hàng $date=$_POST['your date field name'];

insert into **Your_Table Name** values('$date',**other fields**);

Bạn phải chứa ngày trong một cote ('')

Tôi hy vọng nó sẽ giúp.

-2 hữu ích 0 bình luận chia sẻ

Hướng dẫn dùng str_to_datetime mysql trong PHP

Đăng nhập để trả lời câu hỏi

Có thể bạn quan tâm

Hướng dẫn dùng str_to_datetime mysql trong PHP