Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. Социальная инженерия и социальные хакеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель PHP 5 / 6 (3 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP 5/6. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Парсинг даты
 
 автор: Ильдар   (03.07.2009 в 13:41)   письмо автору
 
 

Встала такая задача:
Обработать введенную дату, она может быть вида 03-07-2009 или 03/07/2009 или 03.07.2009 и вообще их может разделять любой символ кроме букв, цифр.
Я конечно сделал такую вещь как разделения по определенным символам, но думаю, что слишком много кода и вообще по-детски написано:


<?php
function DateParser($date)
    {
    
$date ltrim(rtrim($date));
    
$pos strrpos($date"-");
        if (
$pos === true)
            {
            
$ext "-";
            }
    
$pos strrpos($date"\\");
        if (
$pos === true)
            {
            
$ext "\\";
            }
    
$pos strrpos($date"/");
        if (
$pos === true)
            {
            
$ext "/";
            }
    
$pos strrpos($date".");
        if (
$pos === true)
            {
            
$ext ".";
            }
    
$pos strrpos($date",");
        if (
$pos === true)
            {
            
$ext ",";
            }
    
$pos strrpos($date" ");
        if (
$pos === true)
            {
            
$ext " ";
            }
            
        if (!isset(
$ext))
            {
            
$ext "error";
            }
        
      return 
DateFormat($date$ext);
    }


function 
DateFormat($date$ext)
    {
        if (
$ext != "error")
            {
            
$tmpDate explode($ext$date);
            
$date $tmpDate[2]."-".$tmpDate[1]."-".$tmpDate[0];
            }
        else
            {
            
$date $ext;
            }
      return 
$date;
    } 
?>



Я вот подумал может тут целесообразнее применить регулярные выражения? но тут нужно учесть что могут вводится дата вида не только 03-07-2009 но и 3-7-2009

После выаолнения функций, дата принимает вид 2009-07-03

  Ответить  
 
 автор: Ильдар   (03.07.2009 в 16:19)   письмо автору
 
   для: Ильдар   (03.07.2009 в 13:41)
 

Выход нашел, только вот пробелы не учитывает((
<?
function DatePregParser($date)
    {
        
$pattern "/^([\d]+)([^0-9a-z]+)([\d]+)([^0-9a-z]+)([\d]+)$/isU";
        
$tmpDate preg_match_all($pattern$date$out);
        for(
$i 0$i count($out[0]); $i++)  
              {  
                
$date $out[5][$i]."-".$out[3][$i]."-".$out[1][$i];  
            }
      return 
$date;
    }
?>

  Ответить  
 
 автор: Ильдар   (03.07.2009 в 17:02)   письмо автору
 
   для: Ильдар   (03.07.2009 в 16:19)
 

короча всё чикипуки работает :) это у меня косяк был вне функции!
вот правильный рабочий
<?
function DatePregParser($date)
    {
        
$date DateStrToInt($date);
        
$pattern "/^([\d]+)([^0-9a-z]+)([\d]+|[a-z]+)([^0-9a-z]+)([\d]+)$/isU";
        
$tmpDate preg_match_all($pattern$date$out);
        for(
$i 0$i count($out[0]); $i++)  
              {  
                
$date $out[5][$i]."-".$out[3][$i]."-".$out[1][$i];  
            }
      return 
$date;
    }
?>

$date = DateStrToInt($date); - преобразует название месяца из текстового в цифровой формат, это на случай если введено название месяца текстом типа 3 июня 2009
спасибо мне! :)

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования