Я пытаюсь разобрать строку в определенном формате, и я действительно удивлен, обнаружив, что я не могу найти хорошую функцию для этого.
Единственный, который я нашел, это strtotime, и он не подходит, поскольку он догадывается о формате даты. Я действительно не доверяю части «догадки». Кроме того, мой ввод строки во французском формате (dd / mm / aaaa), который кажется, что он не совсем понятен (он анализирует американские форматы, такие как mm / dd / aaaa).
Я ищу функцию, которая вводит строку даты и формат для синтаксического анализа. Я мог бы сделать это сам с регулярным выражением, но не могу поверить, что его еще нет.
Я нашел :
Любое предложение ?
К сожалению, кажется, что такой синтаксический анализ лучше делать вручную , взламывая строку косой чертой, а затем переключая день и месяц.
Проверьте Zend_Date , который позволяет указать формат, когда вы устанавливаете дату. Помимо констант для многих распространенных форматов , вы также можете указать свой собственный .
$date = new Zend_Date(); $date->set('27/08/2009','DD/MM/YYYY');
Следующий комментарий php.net на strtotime может помочь:
Сбой для неамериканских дат, когда упорядочение неопределенное, например 01/02/2003 – анализирует это как 1 февраля, а не 2 января.
Если вы партируете даты для неамериканского языка, вы можете перевернуть эти элементы своей даты:
<?php $y = $_POST['date']; if (preg_match('/^\s*(\d\d?)[^\w](\d\d?)[^\w](\d{1,4}\s*$)/', $y, $match)) { $y = $match[2] . '/' . $match[1] . '/' . $match[3]; } echo date('d # m # Y', strtotime($y)); ?>
ПРЕДУПРЕЖДЕНИЕ. Выше всего работает только для дат и перерывов раз: 12:30:01 будет преобразовано в 30/12/01.
Я сам написал класс, я думаю, вы найдете подходящую версию в gadmdatecommand.php в http://sourceforge.net/projects/phpdbedittk
Что касается комментариев здесь, чтобы просто взорваться «/» и заменить номер, это не так просто. Если вы предлагаете ввести даты в поле ввода, вы можете получить – в зависимости от местоположения пользователя и приложения
1/7/2010 1.7.2010 1-7-2010 15 июл 1 июл 2010 1/6/8
и многие другие варианты. Я решил эту проблему (по крайней мере, для меня успешно), создав dateformats, каждый из которых имеет: a) регулярное выражение, которое соответствует формату b) сопоставление массива, которое соответствует скобкам регулярных выражений, в фигуры даты (день, месяц, минута, am / pm) c) формат вывода для даты ()
НТН
Если вы знаете, что ваш формат ввода даты будет отформатирован на английском языке, вы можете перевести его в более стандартный формат даты. Простой парсинг 24/7/2007
по 2007-07-24
тривиален. Взорвите с помощью косой черты и поместите детали в нужное место. Я знаю, что strtotime
правильно проанализирует 2007-07-24
.
strptime():
Внутри эта функция вызывает функцию strptime (), предоставляемую библиотекой C системы. Эта функция может демонстрировать ( ! ) Заметно различное поведение в разных операционных системах. Использование date_parse_from_format()
, которое не страдает от этих проблем, рекомендуется на PHP 5.3.0 и более поздних версиях .
http://www.php.net/manual/en/function.strptime.php