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

Форум PHP

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

 

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

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

тема: Помогите с парсингом даты
 
 автор: netas   (13.06.2010 в 19:04)   письмо автору
 
 

Нужно выбрать из такой даты: 10 Мая 2010 число, день, год.
Т.е. выбрать число до слова (там может быть и 1 и 10), слово (может быть и Сентябрь, т.е. длинее) и число после слова.
А ещё лучше преобразовать её в timestamp, чтобы сравнить с текущей датой.
Не подскажете, как правильно составить рег. выражение?
Или есть другой способ?

  Ответить  
 
 автор: Trianon   (13.06.2010 в 19:52)   письмо автору
 
   для: netas   (13.06.2010 в 19:04)
 

рег выр.

([0-9])+\s*(Января|Февраля|...|Декабря)\s*([0-9]+)

  Ответить  
 
 автор: Usta   (13.06.2010 в 19:58)   письмо автору
 
   для: Trianon   (13.06.2010 в 19:52)
 


<?
function rep_date($month)
{
$m_rus = array("Январ","Феврал","Март","Апрел","Ма","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр");
$key array_search(substr($month0, -1),$m_rus) + 1;
return 
$key;
}
$date "10 Мая 2010"
$time explode(" ",$date);
$time[1] = rep_date($time[1]);
echo 
"Время timestamp: {$time[1]}-{$time[0]}-{$time[2]}<br>";
echo 
"Время(Unix): ".strtotime("{$time[0]}.{$time[1]}.{$time[2]}"), "\n";
?>

  Ответить  
 
 автор: netas   (13.06.2010 в 21:32)   письмо автору
 
   для: Usta   (13.06.2010 в 19:58)
 

Чего-то он выдаёт 1-10-2010, хотя должен 1-5-2010
Хотя спасибо и на этом, разберёмся.

  Ответить  
 
 автор: netas   (13.06.2010 в 22:31)   письмо автору
 
   для: Usta   (13.06.2010 в 19:58)
 

Не, что-то не получается. Даже с подставленной сегодняшней датой 13 Июня 2010 и
strtotime('today')
они всё-равно различаются.

  Ответить  
 
 автор: netas   (13.06.2010 в 21:53)   письмо автору
 
   для: Trianon   (13.06.2010 в 19:52)
 

Спасибо

  Ответить  
 
 автор: Usta   (13.06.2010 в 22:57)   письмо автору
 
   для: netas   (13.06.2010 в 21:53)
 

У меня одинаковое время получилось

<?
$date 
"13 Июня 2010"
$time explode(" ",$date);
$time[1] = rep_date($time[1]);
echo 
"Время timestamp: {$time[1]}-{$time[0]}-{$time[2]}<br>"// 6-13-2010
echo "Время(Unix): ".strtotime("{$time[0]}.{$time[1]}.{$time[2]}")."<br/>\n"// 1276372800
echo "Время(Unix): ".strtotime("today")."<br/>\n";  // 1276372800
?>

  Ответить  
 
 автор: netas   (13.06.2010 в 23:09)   письмо автору
 
   для: Usta   (13.06.2010 в 22:57)
 

А так не сходятся:

<? 
function rep_date($month

$m_rus = array("Январ","Феврал","Март","Апрел","Ма","Июн","Июл","Август","Сентябр","Октябр","Ноябр","Декабр"); 
$key array_search(substr($month0, -1),$m_rus) + 1
return 
$key

    
$date "13 Июня 2010";  
$time explode(" ",$date); 
$time[1] = rep_date($time[1]); 
echo 
"Время timestamp: {$time[1]}-{$time[0]}-{$time[2]}<br>"// 1-13-2010
echo "Время(Unix): ".strtotime("{$time[0]}.{$time[1]}.{$time[2]}")."<br/>\n"// 1263333600 
echo "Время(Unix): ".strtotime("today")."<br/>\n";  // 1276372800 
?>


Там где-то ошибка, не могу понять, где.

  Ответить  
 
 автор: Usta   (13.06.2010 в 23:38)   письмо автору
 
   для: netas   (13.06.2010 в 23:09)
 

тут еще касяк в том что если месяц с маленькой буквы то функция вернет 1, вот в чем загвостка.
Модификация, должно заработать.

<?
function rep_date($month)
{
$month strtolower($month);
$m_rus = array("январ","феврал","март","апрел","ма","июн","июл","август","сентябр","октябр","ноябр","декабр");
$key array_search(substr($month0, -1),$m_rus) + 1;
return 
$key;
}
$date "13 Июня 2010"
$time explode(" ",$date);
$time[1] = rep_date($time[1]);
echo 
"Время timestamp: {$time[1]}-{$time[0]}-{$time[2]}<br>";
echo 
"Время(Unix): ".strtotime("{$time[0]}.{$time[1]}.{$time[2]}")."<br/>\n"// 1276372800
echo "Время(Unix): ".strtotime("today")."<br/>\n";  // 1276372800
?>

  Ответить  
 
 автор: netas   (13.06.2010 в 23:55)   письмо автору
 
   для: Usta   (13.06.2010 в 23:38)
 

Не, всё-равно выдаёт дату 1-13-2010

  Ответить  
 
 автор: Usta   (13.06.2010 в 23:59)   письмо автору
 
   для: netas   (13.06.2010 в 23:55)
 

Проверьте на каком этапе он не работает.
Поставьте

<? 
function rep_date($month)
{
$month strtolower($month);
$m_rus = array("январ","феврал","март","апрел","ма","июн","июл","август","сентябр","октябр","ноябр","декабр");
$month substr($month0, -1); echo  "Обрезали: ".$month."<br/>"// Обрезали: июн
$key array_search($month,$m_rus) + 1; echo  "Ключ: ".$key."<br/>"// Ключ: 6
return $key;
}
?>

и попробуй вместо array_search() поставить array_keys()

  Ответить  
 
 автор: netas   (14.06.2010 в 09:31)   письмо автору
 
   для: Usta   (13.06.2010 в 23:59)
 

При array_keys выдал ошибку "Warning: array_keys() [function.array-keys]: The first argument should be an array in..."
У меня выдаёт Ключ:1

  Ответить  
 
 автор: Trianon   (14.06.2010 в 11:23)   письмо автору
 
   для: netas   (14.06.2010 в 09:31)
 

простите, а Вы вслепую советы исполняете, или всё же пытаетесь вникнуть в то, что Вам предлагают?

  Ответить  
 
 автор: Usta   (14.06.2010 в 14:52)   письмо автору
 
   для: netas   (14.06.2010 в 09:31)
 

>При array_keys выдал ошибку "Warning: array_keys() [function.array-keys]: The first argument should be an array in..."
ну правильно там для array_keys() 1 аргумент - массив, 2 аргумент - строка. Поменяйте местами.
По экспериментировать:
<? $key array_keys($m_rus,$month); ?>

<? $key array_search($month,$m_rus,true); // Поставить  true?>


Если не получится, то я со всем не понимаю что у вас не сходится. :-(

  Ответить  
 
 автор: netas   (14.06.2010 в 21:53)   письмо автору
 
   для: Usta   (14.06.2010 в 14:52)
 

Не получается.
Попробовал вот так:
$test= "1 Декабря 2010";
$date=explode(" ",$test); 

echo $date['2']."-"; if($date['1']=="Января")echo "01";if($date['1']=="Февраля")echo "02";if($date['1']=="Марта")echo "03";if($date['1']=="Апреля")echo "04";if($date['1']=="Мая")echo "05";if($date['1']=="Июня")echo "06";if($date['1']=="Июля")echo "07";if($date['1']=="Августа")echo "08";if($date['1']=="Сентября")echo "09";if($date['1']=="Октября")echo "10";if($date['1']=="Ноября")echo "11";if($date['1']=="Декабря")echo "12"; echo"-"; echo $date['0'];

В принципе, получается как надо.
Подскажите, как можно запихнуть это всё в переменную?

  Ответить  
 
 автор: Trianon   (15.06.2010 в 00:44)   письмо автору
 
   для: netas   (14.06.2010 в 21:53)
 

а всё в одну строку растянуть - это чтоб всем сразу прикурить чем было?

  Ответить  
 
 автор: Usta   (15.06.2010 в 01:17)   письмо автору
 
   для: netas   (14.06.2010 в 21:53)
 

Тогда уж так:

<?
function rep_date($month)
{
$month strtolower($month);
$m_rus = array("январ","февраля","март","апрел","ма","июн","июл","август","сентябр","октябр","ноябр","декабр");
$month substr($month0, -1);
foreach(
$m_rus as $key => $val)
 {
  if(
$val == $month) return ($key+1);
 }

}
$date "15 Июнь 2010"
$time explode(" ",$date);
$time[1] = rep_date($time[1]); echo $time[1];
echo 
"Время timestamp: {$time[1]}-{$time[0]}-{$time[2]}<br>";
echo 
"Время(Unix): ".strtotime("{$time[0]}.{$time[1]}.{$time[2]}")."<br/>\n"// 1276545600
echo "Время(Unix): ".strtotime("today")."<br/>\n";  // 1276545600
?>

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

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