Tôi không thể tin rằng tôi chưa bao giờ gặp phải điều này trước đây.Cách tạo ngày phân tích strtotime theo định dạng Úc (nghĩa là Vương quốc Anh): dd/mm/yyyy?
Về cơ bản, tôi đang phân tích văn bản trong tài liệu văn bản do con người tạo và một trong các trường tôi cần phân tích là ngày và giờ. Vì tôi ở Úc, ngày được định dạng như dd/mm/yyyy
nhưng strtotime
chỉ muốn phân tích cú pháp đó là ngày được định dạng ở Hoa Kỳ. Ngoài ra, phát nổ bởi /
sẽ không hoạt động vì, như tôi đã đề cập, các tài liệu này được nhập bằng tay và một số trong số đó có dạng d M yy
.
Tôi đã thử nhiều kết hợp của setlocale
nhưng bất kể tôi cố gắng làm gì, ngôn ngữ luôn được đặt thành tiếng Anh Mỹ.
Tôi khá chắc chắn setlocale là chìa khóa ở đây, nhưng tôi dường như không thể tấn công đúng mã. Cố gắng này:
- au
- au-en
- EN_AU
- australia
- aus
Bất cứ điều gì khác tôi có thể thử?
Để rõ ràng: Tôi đang chạy trên IIS bằng hộp Windows.
Cảm ơn rất nhiều :)
Iain
Ví dụ:
$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
Tạo
2 September 2010 14:00
Tôi muốn nó để sản xuất:
9 February 2010 14:00
Giải pháp của tôi
Tôi đang đưa ra các đánh dấu vào một trong những câu trả lời ở đây vì nó là một giải pháp dễ dàng hơn để đọc nhiều để tôi, nhưng đây là những gì tôi đã đưa ra:
$DateTime = "9/02/10 2.00PM";
$USDateTime = preg_replace('%([0-3]?[0-9]{1})\s*?[\./ ]\s*?((?:1[0-2])|0?[0-9])\s*?[./ ]\s*?(\d{4}|\d{2})%', '${2}/${1}/${3}', $DateTime);
echo date('j F Y H:i',strtotime($USDateTime));
Bởi vì tôi không thể dựa vào người dùng để phù hợp với mục ngày của họ, tôi đã thực hiện regex của tôi một chút phức tạp hơn:
- 0 hoặc 1 chữ số từ 0 đến 3
- 1 chữ số từ 0 đến 9 - có điều này sẽ khớp với 37 là ngày hợp lệ nhưng tôi nghĩ rằng regex đã đủ lớn!
- Có thể là một số khoảng trắng
- Xác định ký tự (a '.'Một '/' hoặc' ')
- thể có một số khoảng trắng
- Hoặc:
- Một số từ 10 đến 12 HOẶC
- Một số từ 1 đến 9 với một tùy chọn hàng đầu 0
- thể có một số ký tự khoảng trắng
- khoanh vùng (một ' ' một '/' hoặc'')
- thể có một số khoảng trắng
- Hoặc:
- Một số dài 2 chữ số HOẶC
- Một số 4 chữ số dài
Hy vọng rằng điều này sẽ phù hợp với hầu hết các phong cách của ngày viết ...
Bạn có muốn sản xuất '9 tháng 2 năm 2010 14: 00' không? Hay các bạn chỉ có 11 tháng trong năm? –
Có, nhận thấy điều này và thay đổi nó. Cà phê vẫn chưa khởi động. :) –
Câu hỏi này có thể giúp bạn hiểu http://stackoverflow.com/questions/5597833/strange-behaviour-of-my-code-with-strtotime/5597905#5597905 – Twelve47