Intereting Posts
Исключение исключений из Guzzle (PHP) Настройка цветов для определенных текстовых слов в эхо? Как использовать компонент проверки symfony2 в устаревшем проекте PHP? Невозможно выполнить java-программу с помощью функции php exec Как включить текстовый файл в PHP как PHP, без печати на страницу? как я могу открыть файл в zip-файле, не извлекая его из PHP Оптимизация формулы haversine SQL-вызов в PHP CodeIgniter: глобальные Vars через контроллер и косвенная модификация перегруженного имущества Заголовки Laravel и кэширование в php Как я могу анализировать дату из текстового файла? Стрип-теги и все между ними php singleton database connection, является ли этот код плохой практикой? Реализация поисковой системы сайта, которая ищет статические страницы Как отображать японские символы на странице php? добавление идентификатора пользователя из базы данных в данные сеанса в Codeigniter?

PHP: лучший парсер даты, чем strtotime

Я пытаюсь разобрать строку в определенном формате, и я действительно удивлен, обнаружив, что я не могу найти хорошую функцию для этого.

Единственный, который я нашел, это strtotime, и он не подходит, поскольку он догадывается о формате даты. Я действительно не доверяю части «догадки». Кроме того, мой ввод строки во французском формате (dd / mm / aaaa), который кажется, что он не совсем понятен (он анализирует американские форматы, такие как mm / dd / aaaa).

Я ищу функцию, которая вводит строку даты и формат для синтаксического анализа. Я мог бы сделать это сам с регулярным выражением, но не могу поверить, что его еще нет.

Я нашел :

  • DateTime :: createFromFormat () . Но он работает только с PHP 5.3, и у меня нет возможности обновлять версию PHP (5.2)
  • strptime () . Этот метод делает то, что я хочу, но не реализован на платформе Windows (кстати: WTF ??)

Любое предложение ?

К сожалению, кажется, что такой синтаксический анализ лучше делать вручную , взламывая строку косой чертой, а затем переключая день и месяц.

Проверьте 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