Автор Тема: Дата в Perl  (Прочитано 8055 раз)

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

  • Гость
Дата в Perl
« : 05 Апреля 2002, 10:50:32 »
получаю текущую дату:
 ($day,$mon,$year) = (localtime(time))[3,4,5];
 $year -= 100;  
 $mon;
 if ($mon<=0) {$mon=12; $year=$year-1;}
 $adate = sprintf("%02d.%02d.%02d",$day,$mon,$year);
(выше - это чтобы привести дату к формату dd.mm.yy)

читаю вторую дату из БД:
 $dates=$row{\'DATA_IN\'};

теперь их нужно сравнить:
 if ($dates >= $adate) {$news=\'new\';} else {$news=\'\';}

но сравнение не работает :-(
подскажите, где ошибка?

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Дата в Perl
« Ответ #1 : 05 Апреля 2002, 11:48:09 »
Цитировать
но сравнение не работает :-(

Да сравнение как раз должно работать:)
Да и дату ты ищешь правильно...
А вот насчёт БД  я не уверен, на всякий случай проверь:
print "$dates\\n";
Там вообще дата, и того ли она формата?
Ну к чему все это, лучше бы водки выпили...

  • Гость
Дата в Perl
« Ответ #2 : 05 Апреля 2002, 11:58:57 »
проверял... обе даты (из базы и текущая) выводятся нормально.
может нужно сравнивать даты, а не строки? Я не совсем понимаю в каком формате $dates и $adate.

Оффлайн Green Kakadu

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2757
  • +1/-0
  • 0
    • Просмотр профиля
    • http://gnezdo.webscript.ru
Дата в Perl
« Ответ #3 : 05 Апреля 2002, 12:02:50 »
Цитировать
dd.mm.yy

ээ, а может лучше в секундах оставлять для сравнения?
:)
 в исканиях.

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Дата в Perl
« Ответ #4 : 05 Апреля 2002, 12:23:30 »
Ну вот я сочинил вроде прогу:
Смотри по адресу:
http://www.glebushka.hut.ru/cgi-bin/hot/date.cgi
Код проги:
#!/usr/bin/perl
($day,$mon,$year) = (localtime(time))[3,4,5];
$year -= 100;
$mon;
if ($mon<=0) {$mon=12; $year=$year-1;}
$adate = sprintf("%02d.%02d.%02d",$day,$mon,$year);
print "Content-Type: text/html; Charset=windows-1251\\n\\n";
print "$adate\\n";
$date2 = 06.04.02;
if ($adate >= $date2){
print "$adate\\n";
}else{
$verdad = \'\';
print "Да работает ведь сравнение!!!\\n";
}
Во! Чего тебе не нравиться?
Ну к чему все это, лучше бы водки выпили...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Дата в Perl
« Ответ #5 : 05 Апреля 2002, 12:35:46 »
Absolute Perl выругался следующими словами:

Useless use of a variable in void context at noname.pl line 4.
Name "main::verdad" used only once: possible typo at noname.pl line 13.
Argument "05.03.02" isn\'t numeric in numeric ge (>=) at noname.pl line 10.

ЗЫ. noname.pl здесь - это твой скрипт.
The documentations is your friend

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Дата в Perl
« Ответ #6 : 05 Апреля 2002, 12:45:48 »
Ну вообще конечно правпильно ругается, насчёт 4...
насчёт $verdad тоже надо "" вместо \'\'
Ну можно и ge написать и вравнивать строки, если он так трепетно к этому относится, но в общем и целом он должен работать!
Ну к чему все это, лучше бы водки выпили...

  • Гость
Дата в Perl
« Ответ #7 : 05 Апреля 2002, 13:05:07 »
очень странно... этот фрагмент действительно работает!

но у меня в скрипте - ни в какую...((
вот, например, что выдает:
21.03.01 >= 05.03.02   - истина
03.01.02 >= 05.03.02   - ложь
22.03.01 >= 05.03.02   - истина
03.02.02 >= 05.03.02   - ложь

где первая дата - $dates, а вторая - $adate (сегодняшняя)

Оффлайн glebushka

  • студент
  • Ветеран
  • *****
  • Сообщений: 944
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.intellectuals.ru
Дата в Perl
« Ответ #8 : 05 Апреля 2002, 13:11:20 »
Цитировать
вот, например, что выдает:
21.03.01 >= 05.03.02 - истина
03.01.02 >= 05.03.02 - ложь
22.03.01 >= 05.03.02 - истина
03.02.02 >= 05.03.02 - ложь

И правильно делает!!!!!!!!
1) 21>05 - Однозначно! (месяц одинаковый, сраниваем даты)
2) 1>3 - ФУФЛО! (месяцы разные, сравниваем месяцы)
3) 22>05 - Однозначно! (ну и т.д.)
4) 3>5 - ФУФЛО!
Ну всё правильно тебе выдал, чего тебе не нравится?
Так что ты переработал:))))
Кстати учти замечания NeoNox, а то код действительно кривой какой-то...
Ну к чему все это, лучше бы водки выпили...

  • Гость
Дата в Perl
« Ответ #9 : 05 Апреля 2002, 13:29:36 »
ну вы даете! а год уже никого не интересует?
21.03.01 >= 05.03.02    - это правильно?

меня интересуют все даты за последний месяц. вот за этим и произвожу сравнение.  :-)

  • Гость
Дата в Perl
« Ответ #10 : 05 Апреля 2002, 14:41:17 »
Печальное событие, господа! У меня Perl при условии:

  if ($dates >= $adate) {$news=\'new\';} else {$news=\'\';}

сравнивает только дни.

Битва с этим проста:
  разложить дату и сравнивать поэлементно.
  if (($y >= $year) && ($m >= $mon) && ($d >= $day))

Большое всем спасибо! ;-))

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Дата в Perl
« Ответ #11 : 05 Апреля 2002, 14:48:52 »
Цитировать
Битва с этим проста:

Она еще проще будет если сравнивать числа в формате localtime. ;) А потом уже их "раскладывать" на дни. месяц и год...
The documentations is your friend

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Дата в Perl
« Ответ #12 : 05 Апреля 2002, 15:18:35 »
Цитировать
разложить дату и сравнивать поэлементно.

:)) Сравнивать надо просто в формате yymmdd или как сказал NeoNox.
2B OR NOT 2B = FF

Оффлайн Kostya

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 19
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Дата в Perl
« Ответ #13 : 05 Апреля 2002, 17:09:22 »
$data1=\'01.02.02\';
$data2=\'01.02.03\';
if(join(".",reverse split(/\\./,$data1)) ge join(".",reverse split(/\\./,$data2)))
{ print ">=\\n"; }
else { print "<\\n"; }
Конечно, если даты прошлого века не попадаются

  • Гость
Дата в Perl
« Ответ #14 : 06 Апреля 2002, 02:12:44 »
>> 21.03.01 >= 05.03.02 - это правильно?

Конечно правильно. ">=" операция сравнения чисел, пререводим строки в числа:

1) 21.03.01
"2" - цифра, полет нормальный
"1" - цифра, полет нормальный
"." - точка, также может являться частью числа
"0" - пошла десятичная часть, все в порядке
"3" - продолжение десятичной части
"." - еще одна точка, ни в одном из форматов записи числа двух точек быть не может, ошибка, заканчиваем.
 в итоге имеем число - "21.03".

Получить число из "05.03.02" и сравнить оставляется в качестве домашнего задания.

 

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