Автор Тема: сравнение двух дат  (Прочитано 12147 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Timofey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
сравнение двух дат
« : 29 Октября 2001, 14:23:29 »
Есть две даты в формате

$t1=2001-10-27 14:12:12

$t2=2001-11-27 16:12:12

как сравнить их, т.е. если одна больше другой, во временном
смыле,то ......

if($t1 > $t2){......}
else {.......}

во временном смыле это работает неправильно.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
может так:
« Ответ #1 : 29 Октября 2001, 16:41:39 »
может перевести их в секунды и сравнить?
 в исканиях.

Оффлайн Fluke

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 62
  • +0/-0
  • 0
    • Просмотр профиля
сравнение двух дат
« Ответ #2 : 29 Октября 2001, 19:22:45 »
Попробуй просто напросто сравнить их в строковом контексте.
Должно сработать.
Например так:

if($t1 gt $t2){......}
else {.......}

Оффлайн Timofey

  • Фанат форума
  • Постоялец
  • ***
  • Сообщений: 108
  • +0/-0
  • 0
    • Просмотр профиля
Каким образом перевести их в секунды ?
« Ответ #3 : 31 Октября 2001, 16:29:58 »
Каким образом перевести их в секунды ?

Оффлайн dimfish

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 27
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сравнение двух дат
« Ответ #4 : 31 Октября 2001, 17:37:33 »

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);
}

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
сравнение двух дат
« Ответ #5 : 06 Ноября 2001, 13:31:00 »
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;
}
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн dimfish

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 27
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сравнение двух дат
« Ответ #6 : 06 Ноября 2001, 16:15:36 »
vladsu
,substr($_[1], 11,2)
а если такое время : "2001-10-27 7:12:11" ????:confused:

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
сравнение двух дат
« Ответ #7 : 06 Ноября 2001, 23:21:42 »
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 :)
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн dimfish

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 27
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сравнение двух дат
« Ответ #8 : 08 Ноября 2001, 11:25:39 »
vladsu
;)

Оффлайн Nudlok

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 32
  • +0/-0
  • 0
    • Просмотр профиля
    • http://cmp.h14.ru
сравнение двух дат
« Ответ #9 : 11 Ноября 2005, 20:51:07 »
не мог бы кто-нибуть поподробнее описать процесс сравнения двух дат с помощью Date::Manip

к примеру
#получаем дату
use Time::localtime;
$now = ctime(); # Fri Nov 11 20:44:22 2005
#сколько дней нужно хранить запись
$actualdays=param(\'actualdays\'); #например 15

#нужно чтобы при каждом обращении к выводящему скрипту даты записей сравнивались с текущей, и, если кол-во дней актуальности данной записи истекли, запись удалялась

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
сравнение двух дат
« Ответ #10 : 14 Ноября 2005, 16:28:36 »
Nudlok, не проще ли хранить время в секоундах и сравнивать просто два числа
..
my $old_time = получили прошлое время
my $delta = 60*60*24*15;#15 суток
my $now_time = time();
if ($now_time - $delta > $old_time) {
 die("Ваше время вышло");
}
 в исканиях.

Оффлайн Phoinix

  • RW
  • Ветеран
  • *****
  • Сообщений: 1097
  • +0/-0
  • 2
    • Просмотр профиля
    • http://phoinix.ucoz.ru
сравнение двух дат
« Ответ #11 : 17 Ноября 2005, 03:30:05 »
Timofey

Да что париться то? Fluke в этом плане прав, в таком формате дату можно сравнивать и в строковом выражении... тем паче, что dimfish зря волнуется насчет регулярного выражения, ибо дата явно выдернута из MySQL, ну уж очень похож на формат DATETIME...

Оффлайн Kannabismus

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
сравнение двух дат
« Ответ #12 : 17 Ноября 2005, 15:29:16 »
; 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

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28