Проблема с преобразованием даты

Тема в разделе "PHP", создана пользователем Link100, 20 мар 2011.

Модераторы: latteo
  1. Link100

    Link100 Создатель

    Регистр.:
    16 янв 2010
    Сообщения:
    13
    Симпатии:
    1
    ммм, замудохался с преобразованием даты в норм вид)) Помогите, кому не трудно...

    Для начало вот: дата может выглядеть 5 способами:

    1) "Отменена"
    2) "2000"
    3) "Январь 2000"
    4) "1.01.2000"
    5) "I квартал 2000"

    Чудесным способом не получается пробел заменить на точку в 3 способе, использовал вот этот код:
    PHP:
    $data str_replace(' ''.',$data);
    Вот полный код
    PHP:
    function d_t1($data

    $data trim($data);
    $data str_replace(array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'), array('1','2','3','4','5','6','7','8','9','10','11','12'),$data);
    $arden = array ('I'=>'2','II'=>'5','III'=>'8','IV'=>'11');
    $d explode('.',$data);
    $kol count($d);

    if(
    $kol == '1' && $d[0] <> '') {
    $den '0'$mes '0'$god $d[0];
    } elseif(
    $kol == '1' && $d[0] == 'Отменена') {
    } elseif(
    $kol == '2') {
    $den '0'$mes $d[0]; $god $d[1];
    } elseif(
    $kol == '3' && $d[1] == 'квартал') {
    $den '0'$mes $arden[$d[0]]; $god $d[2];
    } elseif(
    $kol == '3' && $d[1] <> 'квартал') {
    $den $d[0]; $mes $d[1]; $god $d[2];
    } else {
    $den '0'$mes '0'$god '0';
    }
    $data trim($den.'.'.$mes.'.'.$god);
    $data str_replace(' ','',$data);
    return(
    $data);
    }
     
  2. CnecHa3

    CnecHa3 Постоялец

    Регистр.:
    10 фев 2007
    Сообщения:
    105
    Симпатии:
    20
    А какой формат даты изначально?
     
  3. zzallexx

    zzallexx

    Регистр.:
    11 июн 2008
    Сообщения:
    1.036
    Симпатии:
    699
    PHP:
    <?php
    $date
    =array("Отменена""2000""Январь 2000""1.01.2000","I квартал 2000");
    $c=count($date);
    for(
    $i=0;$i<$c;$i++){
    $data $date[$i];
    $data str_replace(' ''.',$data);
    $data trim($data); 
    $data str_replace(array('Январь','Февраль','Март','Апрель','Май','Июнь','Июль','Август','Сентябрь','Октябрь','Ноябрь','Декабрь'), array('1','2','3','4','5','6','7','8','9','10','11','12'),$data); 
    $arden = array ('I'=>'2','II'=>'5','III'=>'8','IV'=>'11'); 
    $d explode('.',$data); 
    $kol count($d); 
    //print_r($d);
    if($kol == '1' && $d[0] <> '') { 
    $den '0'$mes '0'$god $d[0]; 
    } elseif(
    $kol == '1' && $d[0] == 'Отменена') { 
    } elseif(
    $kol == '2') { 
    $den '0'$mes $d[0]; $god $d[1]; 
    } elseif(
    $kol == '3' && $d[1] == 'квартал') { 
    $den '0'$mes $arden[$d[0]]; $god $d[2]; 
    } elseif(
    $kol == '3' && $d[1] <> 'квартал') { 
    $den $d[0]; $mes $d[1]; $god $d[2]; 
    } else { 
    $den '0'$mes '0'$god '0'

    $data trim($den.'.'.$mes.'.'.$god); 
    $data str_replace(' ','',$data);
    echo 
    $data."<br>";
    }
    ?>
    результат
    все заменяется
     
  4. Link100

    Link100 Создатель

    Регистр.:
    16 янв 2010
    Сообщения:
    13
    Симпатии:
    1
    Нет)) Вы меня не правильно поняли) Вот это начальные варианты

    1) "Отменена"
    2) "2000" тут может быть любой год
    3) "Январь 2000" тут может быть любой месяц и год
    4) "1.01.2000" тут может быть любое число до 31, любой месяц и год
    5) "I квартал 2000" аналогично

    Вообще скрипт работает, только проблема в том что не убираются пробелы в 3 варианте и получается массив из 1 элемента "Январь 2000" а не из 2 "Январь.2000"

    А вообще конечная дата должна быть к примеру:
    - 2.6.2010 (2 июня 2010)
    - 0.0.2011 (2011 год)
    - 0.4.2009 (апрель 2009 либо II квартал 2009)

    PS данный формат даты нужен для дальнейшего использоватния. (календарь)
     
  5. Monterpan

    Monterpan Постоялец

    Регистр.:
    3 мар 2008
    Сообщения:
    150
    Симпатии:
    27
    Используйте такую конструкцию:
    PHP:
    $data str_replace(array(chr(32), chr(160)), '.'$data);
    Скорее всего там неразрывный пробел
     
    Link100 нравится это.