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

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);
}
 
А какой формат даты изначально?
 
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>";
}
?>
результат
0.0.Отменена
0.0.2000
0.1.2000
1.01.2000
0.2.2000
все заменяется
 
Нет)) Вы меня не правильно поняли) Вот это начальные варианты

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 данный формат даты нужен для дальнейшего использоватния. (календарь)
 
1) "Отменена"
2) "2000"
3) "Январь 2000"
4) "1.01.2000"
5) "I квартал 2000"
Чудесным способом не получается пробел заменить на точку в 3 способе, использовал вот этот код:
PHP:
$data = str_replace(' ', '.',$data);
Используйте такую конструкцию:
PHP:
$data = str_replace(array(chr(32), chr(160)), '.', $data);
Скорее всего там неразрывный пробел
 
Назад
Сверху