Есть функция, которая немного работает со в временем в пёрле.
Вот кусок, который что-то не так как хочется
if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}};
Пихаую туда $date =22.11.2010 23:59:59, отрабатывает почему-то не певый IF, а последний
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;Что не так в первом, не догоняю, пробовал вместо " ", ставить \s , в общем не помогло.
Глупость получается, взял отдельно проверил, всё правильно первая строка отрабатывает! А в целом в софте не работает, вот где я вызываю всё<?
#exit 0;
$service_type="ani_phone";
require "$CFG::BASE/bin/dateutils";
require "$CFG::BASE/bin/dbaccess";$date_from_int = $date_from;
$date_till_int = $date_till;
$date_f = $date_from_int;
$date_t = $date_till_int;
$FULL_TIME_FORMAT_1 = $CFG::FULL_TIME_FORMAT.'.000';$date_from_int=convert_date($date_from_int,"$CFG::DATE_FORMAT $CFG::FULL_TIME_FORMAT");
$date_till_int=convert_date($date_till_int,"DD.MM.YYYY HH24:MI:SS");print "$date_t --- $date_till_int --- "$CFG::DATE_FORMAT $CFG::FULL_TIME_FORMAT"";
........................................................................Вот кусок
require "$CFG::BASE/bin/dateutils";sub convert_date {
my ($date,$DATE_FORMAT) =@_;
if($DATE_FORMAT eq 'DD.MM.YYYY') {
if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}
};if($DATE_FORMAT eq 'YYYY-MM-DD') {
if($date =~ /(\d\d\d\d)\-(\d\d)\-(\d\d)/ ){
return $1 . "-" . $2 . "-" . $3;
}
};if($DATE_FORMAT eq 'DD.MM.YYYY HH24') {
if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}
};if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI') {
if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 ;
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}
};if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
if($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)(\s)(\d+)\:(\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
} elsif($date =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}};
return undef;
}
Чаго не так не врублюсь!
Бешанная лажа, как побеждать не знаюsub convert_date {
my ($date,$DATE_FORMAT) =@_;
my $date = "$date";
# my $date = "22.11.2010 23:59:59";
# return "-".$date."-";В общем переприсваивание не помогает, если самому руками в кавычках написать дату то всё ОК - строка нужного ифа выполняется, если вывести из неё всё что нужно то тоже ОК - типа строка даты в точь в точь, но при передачи параметра ни разу работает нужная строка выбора!!!
> Бешанная лажа, как побеждать не знаю
> sub convert_date {
> my ($date,$DATE_FORMAT) =@_;
> my $date = "$date";а не ограничивает ли ключевое слово my область видимости $date ?
> # my $date = "22.11.2010 23:59:59";
> # return "-".$date."-";а другой return есть?
> В общем переприсваивание не помогает, если самому руками в кавычках написать дату
> то всё ОК - строка нужного ифа выполняется, если вывести из
> неё всё что нужно то тоже ОК - типа строка даты
> в точь в точь, но при передачи параметра ни разу
> работает нужная строка выбора!!!
sub convert_date {
($dateexa,$DATE_FORMAT) =@_;
if($DATE_FORMAT eq 'DD.MM.YYYY HH24:MI:SS') {
if($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;
} elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5;
} elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":00";
} elsif($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)/ ){
return $3 . "-" . $2 . "-" . $1;
}};
return undef;
}Вот такая процедурка в двух словах. Причём я убрал my что не парилось, дал другую переенную, которой точно ни где нет.
а другой return есть? - не срабатывает какой надо
if($dateexa =~ /(\d\d)\.(\d\d)\.(\d\d\d\d)\ (\d+)\:(\d+)\:(\d+)/ ){
return $3 . "-" . $2 . "-" . $1 . " " . $4 . ":" . $5 . ":" . $6;Всё так же не берёт что надо.
use strict;
use warnings;Никогда не пиши на Perl без них. Когда вставишь - не поленись и исправь все 100500 предупреждений - это серьёзные проблемы.
Убери лишние ; после if {}
Обычно помогает печать содержимого переменных, попавших в функцию, и возвращаемых ею.PS. не нужно экскейпить пробелы, двоеточия и тире.
> Обычно помогает печать содержимого переменных, попавших в функцию, и возвращаемых ею.Спасибо, решил попробовать, это перед тем, сказать, что уже в выводил в веб, но веб жрёть лишнии проблы!!! Благодаря файлику увидел между датой и временем ДВА пробела, вот оно не искало!
Спасибо за помощь.