|
|
|
| Встала такая задача:
Обработать введенную дату, она может быть вида 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 в 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 в 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
спасибо мне! :) | |
|
|
|