2011-01-30 23 views
16

Tôi có một ngày theo định dạng này: 20101101120000Chuyển đổi định dạng ngày không phổ biến thành dấu thời gian theo cách hiệu quả nhất có thể?

Tôi cần chuyển đổi nó thành dấu thời gian bằng PHP.

Tôi đã tìm kiếm tài liệu PHP trực tuyến nhưng không thể tìm thấy bất kỳ thứ gì có thể chuyển đổi trực tiếp. Có tồn tại không? Nếu không, cách hiệu quả nhất để thực hiện chuyển đổi là gì? Cảm ơn sự giúp đỡ của bạn.

+4

gì sẽ mong đợi đầu ra cho ví dụ này? – Gumbo

Trả lời

22

Bạn có thể làm điều này với DateTime::createFromFormat:

$d = DateTime::createFromFormat('YmdGis', '20101101120000'); 

$d hiện nay là một ví dụ DateTime. Bạn có thể chuyển đổi nó thành dấu thời gian với $d->getTimestamp() hoặc sử dụng các phương pháp DateTime trên đó.

Lưu ý rằng điều này yêu cầu PHP 5.3.

+0

Tất nhiên, hoàn hảo! +1 –

+1

Tôi vừa mới phát hiện ra đó là YmdGis khi câu trả lời của bạn xuất hiện ... +1 cho phản hồi nhanh –

5
strtotime('20101101120000') 

....

+1

Bạn đã thử chưa? Nó có hoạt động không? Từ tài liệu: * Hàm này dự kiến ​​sẽ được cung cấp một chuỗi có chứa định dạng ngày tiếng Anh * –

+1

Ít mạnh mẽ hơn, nhưng có, hoạt động ở đây. – lonesomeday

+0

Tính năng này hoạt động và hữu ích nhất khi làm việc với MySQL. Cũng lưu ý rằng nó sẽ thực hiện chuyển đổi sang GMT dựa trên múi giờ hiện được đặt. – Mchl

2

Bạn cần chức năng strptime.

Các định dạng được mô tả tại strftime.

+0

+1 - Tôi không thấy lý do tại sao điều này không có nhiều upvotes! Hoạt động trở lại với PHP 4, quá. –

+0

Lưu ý: Nội bộ, hàm này gọi hàm strptime() do thư viện C của hệ thống cung cấp. Hàm này có thể thể hiện hành vi khác nhau đáng chú ý trên các hệ điều hành khác nhau. Việc sử dụng date_parse_from_format(), không bị các vấn đề này, được khuyến nghị trên PHP 5.3.0 và sau đó. – mariusnn

0

Tôi chỉ thêm vào câu hỏi được giải quyết này bởi vì điều này có thể hữu ích cho những người dùng tình cờ gặp phải ở đây (như tôi đã làm) và đang tìm kiếm để có được dấu thời gian datetime thực tế.

giả định của tôi cho hầu hết mọi người khi họ đề cập timestamp là họ đang tìm kiếm một bình thường "YYYY-MM-DD HH: MM: SS" dấu thời gian không phải là một dấu thời gian unix mà bạn nhận được khi bạn sử dụng phương pháp getTimestamp() (xem câu trả lời được chấp nhận nếu bạn đang thực sự tìm kiếm Dấu thời gian UNIX).

Vì vậy, tôi sẽ tiếp tục xây dựng trên câu trả lời lonesomeday của (đó là hoàn toàn đúng) cho những người tìm kiếm để thực sự có được một ngày formated hợp lệ mà họ có thể hiển thị cho người dùng hoặc chèn vào cơ sở dữ liệu của họ:

$d = DateTime::createFromFormat('YmdGis', '20101101120000'); 

$formatedDate = $d->format('Y-m-d H:i:s'); // will return 2010-11-01 12:00:00 
$formatedDate = $d->format('m-d-Y h:i A'); // will return 11-01-2010 12:00 PM 
Các vấn đề liên quan