Vì lợi ích của độc giả tương lai người chắc chắn một ngày nào đó sẽ gặp phải vấn đề này (đây là bài viết đầu tiên nếu bạn google "symfony 2 datetime từ chuỗi"), hãy nhớ rằng trong Symfony 2 đối tượng DateTime KHÔNG chấp nhận một chuỗi với định dạng đó: "d/m/Y H:i:s"
và có lẽ cũng không hỗ trợ nhiều loại khác.
Vì lợi ích của việc không trở thành điên lúc đó, tôi đã thực sự phát hiện ra rằng giải pháp dễ nhất và an toàn nhất để tránh sai sót như vậy là cái này:
Đầu tiên, có được ngày của bạn chuỗi từ bất cứ loại yêu cầu bạn đang làm (Trong trường hợp của tôi một yêu cầu AJAX chung) và chuyển đổi nó thành một đối tượng DateTimePicker DateTime, ví dụ này giả định rằng chúng ta cần phải tạo một đối tượng dateTime cho 25/04/2015 15:00
, là định dạng của jQuery UI italian DateTimePicker (đó chỉ là một ví dụ):
$literalTime = \DateTime::createFromFormat("d/m/Y H:i","25/04/2015 15:00");
(lưu ý: sử dụng \
sử dụng đối tượng DateTime php, nếu không bạn sẽ được sử dụng đối tượng datetime Symfony rằng sẽ ném bạn một ngoại lệ)
Sau đó, một khi bạn đã làm điều đó, tạo ra một chuỗi ngày sử dụng sự thoải mái định dạng chức năng, bằng cách cho vào tham số đầu tiên định dạng đầu ra mong đợi (Y-m-d H:i:s
):
$expire_date = $literalTime->format("Y-m-d H:i:s");
bằng cách này bạn chắc chắn 100% rằng bất cứ loại định dạng mà bạn đang đi hoặc nhận này sẽ đúng là conve rted và bạn sẽ không nhận được bất kỳ loại ngoại lệ nào từ đối tượng symfony DateTime, miễn là bạn cung cấp những gì bạn đang mong đợi làm đầu vào.
Biết rằng bài đăng này thực sự khá cũ, tôi đã quyết định đăng bài đó bởi vì tôi không tìm thấy bất kỳ nguồn có giá trị nào khác nhưng điều này để hiểu vấn đề có thể xảy ra ở đâu. Xin lưu ý rằng giải pháp tốt nhất vẫn là gửi chuỗi ngày giờ theo định dạng chính xác, nhưng nếu bạn thực sự không có cách nào để làm điều đó, cách an toàn nhất để chuyển đổi chuỗi đó là chuỗi ở trên.
Bạn có chắc chắn '$ post ['started_at']' chứa nội dung bạn muốn không? Nó không phải là '$ _POST ['started_at']'? –
Ngoài ra, đối tượng 'DateTime' và các phương thức ném ngoại lệ về lỗi. Bạn có nhận được không ai trong số đó? Thử sử dụng 'try/catch'. –