Я не могу поверить, я никогда раньше не сталкивался с этим.
В принципе, я разбираю текст в текстовых документах, созданных человеком, и одно из полей, которые мне нужно проанализировать, - это дата и время. Поскольку я нахожусь в Австралии, даты отформатированы как dd/mm/yyyy
, но strtotime
только хочет проанализировать его как дату форматирования в США. Кроме того, взлом /
не будет работать, поскольку, как я уже упоминал, эти документы вводятся вручную, а некоторые из них имеют форму d M yy
.
Я пробовал несколько комбинаций setlocale
, но независимо от того, что я пытаюсь, язык всегда устанавливается на английский.
Я уверен, что setlocale - это ключ, но, похоже, я не могу нанести удар по правильному коду. Пробовал эти:
- аи
- аи-ан
- en_AU
- Австралия
- AUS
Что-нибудь еще я могу попробовать?
Для ясности: я запускаю IIS с окном Windows.
Большое спасибо:)
Иэйн
Пример:
$mydatetime = strtotime("9/02/10 2.00PM");
echo date('j F Y H:i', $mydatetime);
Выдает
2 September 2010 14:00
Я хочу, чтобы он создавал:
9 February 2010 14:00
Мое решение
Я даю тик на один из ответов здесь, поскольку это гораздо более легкое для чтения решение для моего, но вот то, что я придумал:
$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));
Поскольку я не могу полагаться на то, что пользователи согласуются с их вводом даты, я сделал свое регулярное выражение немного сложнее:
- 0 или 1 цифра между 0 и 3
- 1 цифра между 0 и 9 - да, это будет 37, как действительная дата, но я думаю, что регулярное выражение уже достаточно большое!
- Может быть несколько пробелов
- Разделительный символ (a '.', a '/' или '')
- Может быть несколько пробелов
- Либо:
- Число от 10 до 12 OR
- Число от 1 до 9 с необязательным ведущим 0
- Может быть несколько пробелов
- Разделительный символ (a '.', a '/' или '')
- Может быть несколько пробелов
- Либо:
- Число в 2 цифры длинное ИЛИ
- Число в 4 цифры длиной
Надеюсь, это будет соответствовать большинству стилей написания даты...