Forum Webscript.Ru
Программирование => Perl => Тема начата: Timofey от 29 Октября 2001, 14:23:29
-
Есть две даты в формате
$t1=2001-10-27 14:12:12
$t2=2001-11-27 16:12:12
как сравнить их, т.е. если одна больше другой, во временном
смыле,то ......
if($t1 > $t2){......}
else {.......}
во временном смыле это работает неправильно.
-
может перевести их в секунды и сравнить?
-
Попробуй просто напросто сравнить их в строковом контексте.
Должно сработать.
Например так:
if($t1 gt $t2){......}
else {.......}
-
Каким образом перевести их в секунды ?
-
use Time::Local;
($yyyy, $mm, $dd, $hh, $mi, $ss) = ($date =~ /(\\d+)-(\\d+)-(\\d+) (\\d+):(\\d+):(\\d+)/;
$epoch_seconds = timelocal($ss, $mi, $hh, $dd, $mm, $yyyy);
или более крутой парсинг:
use Date::Manip qw(ParseDate UnixDate);
$date = ParseDate($STRING);
if (!$date) {
# bad date
} else {
@VALUES = UnixDate($date, @FORMATS);
}
-
use Time::Local;
$t1="2001-10-27 14:12:11";
$t2="2001-10-27 14:12:12";
sub CDEMDate {
return (timelocal(substr($_[0],17,2)
,substr($_[0],14,2)
,substr($_[0],11,2)
,substr($_[0], 8,2)
,substr($_[0], 5,2)
,substr($_[0], 0,4))),
(timelocal(substr($_[1],17,2)
,substr($_[1],14,2)
,substr($_[1],11,2)
,substr($_[1], 8,2)
,substr($_[1], 5,2)
,substr($_[1], 0,4)));
}
($t1,$t2) = CDEMDate($t1,$t2);
if ($t1 > $t2) {
print $t1," > ",$t2;
} elsif ($t1 < $t2) {
print $t1," < ",$t2;
} else {
print $t1," = ",$t2;
}
-
vladsu
,substr($_[1], 11,2)
а если такое время : "2001-10-27 7:12:11" ????:confused:
-
to dimfish
A esli ktoto sekundi zabi\'l ili v fevrale 31 den\' napisal, a ???
Etih esli moz\'et bi\'t\' mnogo... a otvet v voprose:
Timofey
Есть две даты в формате
$t1=2001-10-27 14:12:12
$t2=2001-11-27 16:12:12
no ya priznayu tvoy variant luchshe :), t.k. kogda ya eto pisal (mesyaca 3 nazad) u menya bi\'lo tol\'ko para knig po Perl, nu a teper\' ...., i eshe ochen\' horoshaya po "Reg. exp.", a etot kod privel tak dlya raznoobraziya :)
-
vladsu
;)
-
не мог бы кто-нибуть поподробнее описать процесс сравнения двух дат с помощью Date::Manip
к примеру
#получаем дату
use Time::localtime;
$now = ctime(); # Fri Nov 11 20:44:22 2005
#сколько дней нужно хранить запись
$actualdays=param(\'actualdays\'); #например 15
#нужно чтобы при каждом обращении к выводящему скрипту даты записей сравнивались с текущей, и, если кол-во дней актуальности данной записи истекли, запись удалялась
-
Nudlok, не проще ли хранить время в секоундах и сравнивать просто два числа
..
my $old_time = получили прошлое время
my $delta = 60*60*24*15;#15 суток
my $now_time = time();
if ($now_time - $delta > $old_time) {
die("Ваше время вышло");
}
-
Timofey
Да что париться то? Fluke в этом плане прав, в таком формате дату можно сравнивать и в строковом выражении... тем паче, что dimfish зря волнуется насчет регулярного выражения, ибо дата явно выдернута из MySQL, ну уж очень похож на формат DATETIME...
-
; use Class::Date (date)
; my $t1 = date "2001-10-27 14:12:12"
; my $t2 = date "2001-11-27 16:12:12"
; if ($t1 > $t2 )
{ print "$t1 > $t2\\n" }
else
{ print "$t2 > $t1\\n" }
2001-11-27 16:12:12 > 2001-10-27 14:12:12