Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Perl: Общие вопросы > получить дату


Автор: Str!pe 31.3.2007, 14:06
Добрый день всем.
Проблема у меня следующего характера
Цитата

print scalar(localtime);

отдает дату машины пользователя вместе со временем, мне же необходимо вытащить только дату, месяц и день. В страницу они должны попасть в три разных тега, тоесть дата вида "25" в один тег, месяц вида "август" в другой тег, день вида "пятница" в третий.
Знает ли кто-нибудь как это организовать?

З.Ы. С Перлом да и вообще с любым языком прпограммирования знаком второй день (остаточные знания по Паскалю не считаются).

Автор: shamber 31.3.2007, 14:53
Это очень просто организуется 

Код

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);


и все smile

PS по поводу месяц вида "август" в другой тег, день вида "пятница" в третий.

Код


my @abbr = qw( Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec );
    print "$abbr[$mon] $mday";
    # $mon=9, $mday=18 gives "Oct 18"


остальное смотрите в perldoc -f localtime

Автор: Str!pe 31.3.2007, 15:22
shamber
Ну вот так получается... 

Код

my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);

my @abbr = qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь );
    print "$mday";
    print "$abbr[$mon]";
    print "$wday";
    # $mon=9, $mday=18 gives "Oct 18"


я так понимаю надо еще кодировку указать? Да и думаю что делать три разных файла глупо, как раскидать их по тегам?

Ток не минусуйте, просто я общаясь получаю больше знаний чем от книг и прочего, их итак рядом хватает.

Автор: nitr 31.3.2007, 15:56
Str!pe, что значит по тегам раскидать? И зачем на 3 smile
Код ваш вполне нормальный...

Автор: Str!pe 31.3.2007, 16:17
Цитата(nitr @  31.3.2007,  15:56 Найти цитируемый пост)
Str!pe, что значит по тегам раскидать? И зачем на 3 Код ваш вполне нормальный...

Это делается для следующего... в один тег выводится день недели допустим <h3>вторник</h3>, в другой тег допустим <h1>25</h1> выводится дата. В третий выводится месяц <small>Декабрь<small> все это выводится в разных местах стрнаицы.

Автор: nitr 31.3.2007, 17:58
Str!pe, у тебя ООП подход?

Если нет, вот тебе функция ;)
Код

#!perl
use strict; use warnings;

print get_my_time()->{mday};

sub get_my_time {
    my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) =localtime(time);

    return {
        'mday' => $mday,
        'mon'  => qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь )[$mon],
        'wday' => $wday,
    };
}


Добавлено через 1 минуту и 21 секунду
Думаю удобно будет ею пользоваться? smile
там соот. 
mon - get_my_time()->{mon};
wday - get_my_time()->{wday};


Добавлено через 5 минут и 49 секунд
можно уменьшить, но может чуть медленней работать ;)
Код

sub get_my_time {
    return {
        'mday' => (localtime(time))[3],
        'mon'  => qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь )[(localtime(time))[4]],
        'wday' => (localtime(time))[6],
    };
}

Автор: nitr 31.3.2007, 18:37
а можно ещё умнее ;)
Код

sub get_my_time2 {
    return {
        'mday' => $_->[3],
        'mon'  => qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь )[$_->[4]],
        'wday' => $_->[6],
    } for [ localtime(time) ];
}

Автор: tishaishii 31.3.2007, 18:54
Код
sub fdatetime {
    my($format, %datetime)=shift;
    @datetime{+qw(sec min hour mday mon year wday yday isdst)}=localtime(shift||time);
    $datetime{year}+=1900;
    $datetime{mon}++;
    $format=~s{(\%\d*(?:\.\d*)?[bdoxsleiu])\{(.+?)\}}{+sprintf $1, $datetime{$2}}geio;
    +$format
}

print &fdatetime('%02d{hour}:%02d{min}:%02d{sec}');

Автор: nitr 31.3.2007, 18:56
первый способ можно тоже извратить... ;) для экономии памяти наверное ;)
Код

sub get_my_time {
    my ($mday, $mon, $wday) = (localtime(time))[3,4,6];

    return {
        'mday' => $mday,
        'mon'  => qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь )[$mon],
        'wday' => $wday,
    };
}

но я выбираю этот http://forum.vingrad.ru/index.php?showtopic=143834&view=findpost&p=1082342
красивый (скромно ;) )

P.S.:
tishaishii, он просит, чтобы легче по тегам расскидывать ;)

Автор: tishaishii 31.3.2007, 21:59
Ну я и показал как легко это сделать.
А ты читать умеешь или пока что только букву "А" освоил?

Автор: nitr 1.4.2007, 13:20
[offtopic]
Цитата(tishaishii @  31.3.2007,  21:59 Найти цитируемый пост)
А ты читать умеешь или пока что только букву "А" освоил?

tishaishiiты всегда такой разговорчивый или просто прикидываешься?

Твой код вполне, но не всем новичкам он ясен, особенно твои вечные "+", читаемость кода понижается (новичкам).

Просьба не переходить на личности! Уважения к тебе это не прибавит.
[/offtopic]

Автор: Str!pe 2.4.2007, 16:06
Так, а что я должен указать на странице в тегах... что я должен выставить в cами теги, что бы в них вышли нужные значения? Корче как мне рещультаты скрипта выставить в страницу?

Автор: Nab 2.4.2007, 16:33
Цитата(Str!pe @  2.4.2007,  16:06 Найти цитируемый пост)
Так, а что я должен указать на странице в тегах... что я должен выставить в cами теги, что бы в них вышли нужные значения? Корче как мне рещультаты скрипта выставить в страницу?

Да уж smile Вы почитайте чего про ссылки и про передачу параметров smile...

Код

sub get_my_time {
    my ($mday, $mon, $wday) = (localtime(time))[3,4,6];

    return {
        'mday' => $mday,
        'mon'  => qw( Январь Февраль Март Апрель Май Июнь Июль Август Сентябрь Октябрь Ноябрь Декабрь )[$mon],
        'wday' => $wday,
    };
}

my $res = get_my_time;

print "День: $res->{'mday'}\n";
print "Месяц: $res->{'mon'}\n";
print "День недели: $res->{'wday'}\n";


Автор: tishaishii 2.4.2007, 19:17
Цитата(nitr @ 1.4.2007,  13:20)
[offtopic]
Цитата(tishaishii @  31.3.2007,  21:59 Найти цитируемый пост)
А ты читать умеешь или пока что только букву "А" освоил?

tishaishiiты всегда такой разговорчивый или просто прикидываешься?

Твой код вполне, но не всем новичкам он ясен, особенно твои вечные "+", читаемость кода понижается (новичкам).

Просьба не переходить на личности! Уважения к тебе это не прибавит.
[/offtopic]

А к тебе?
Кому-то что-то показалося, что каие-то возможности, которые часто необходимы использовать нельзя, дабы не казалось, что кто-то нарушает чью-то ранимую психику...
Согласись, это как-то ненормально.

Автор: nitr 2.4.2007, 20:52
[offtopic]
tishaishii, если что-то не нравится, пишите письма...
И не стоит о себе так уж жестко...
[/offtopic]


Str!pe, вы задаёте вопросы, не ответив и на наши smile Посмотрите внимательней, а ответов на задачу (как поняли многие) предостаточно...

Автор: korob2001 3.4.2007, 04:26
Модератор: Ребята, не ссорьтесь вы по пустякам.

Автор: Zuzu 3.4.2007, 13:21
Цитата(Str!pe @  2.4.2007,  19:06 Найти цитируемый пост)
Так, а что я должен указать на странице в тегах... что я должен выставить в cами теги, что бы в них вышли нужные значения? Корче как мне рещультаты скрипта выставить в страницу?


1. Сформировать HTML "вручную" и вывести его 

Код

#!/usr/bin/perl

use strict;
use CGI;

my $cgi = new CGI;

my $month = 'December';
my $day     = 25;
my $wday  = 'monday';

print $cgi->header;

print <<EO_HTML;
<h1>Super Date Printer</h1>
<p>Month: <strong>$month</strong></p>
<p>Day: <strong>$day</strong></p>
<p>Wday: <strong>$wday</strong></p>
EO_HTML

exit;



2. Рекомендую посмотреть какой-нибудь "шаблонизатор", например HTML::Template

Автор: Str!pe 11.4.2007, 23:44
tishaishii
nitr
Ого! Тут драка идет за то что бы новичкам помогать? 
Господа не сорьтесь... я все варианты рассматриваю, дело не в сложности и в мастерстве написанного, дело в том, что посдледний раз на Паскале я что то писал лет так 10 назад... Мозг за это время начал думать совсем другими категориями и образами.
За PERL собираюсь взяться серьезно (пока потихоньку, времени нет), так что вопросов еще буду задавать много.
Цитата(nitr @  31.3.2007,  17:58 Найти цитируемый пост)
у тебя ООП подход?

Без понятия  smile

Добавлено через 4 минуты и 16 секунд
Цитата(Zuzu @  3.4.2007,  13:21 Найти цитируемый пост)
Рекомендую посмотреть какой-нибудь "шаблонизатор", например HTML::Template

Спасибо, посмотрю...
Цитата(Zuzu @  3.4.2007,  13:21 Найти цитируемый пост)
 Сформировать HTML "вручную" и вывести его 

Это все понятно... не в разметке вопрос, я имею ввиду что мне нужно поставить в разметку, что бы пользователь загрузив страницу выполнил сценарий... Инклюд?

Автор: nitr 12.4.2007, 00:15
Str!pe
Цитата(Str!pe @  11.4.2007,  23:44 Найти цитируемый пост)
Ого! Тут драка идет за то что бы новичкам помогать? 

думаю неважно smile

Цитата(Str!pe @  11.4.2007,  23:44 Найти цитируемый пост)
Инклюд?

Вы в пхп или в перл? smile

все ответы уже даны всеми smile на ваш ТОПИК

Добавлено через 1 минуту и 22 секунды
это я к тому, что для нового вопроса новый пост ;)

Автор: Str!pe 12.4.2007, 00:38
Цитата(nitr @  12.4.2007,  00:15 Найти цитируемый пост)
думаю неважно

Ну почему же... важно.
Цитата(nitr @  12.4.2007,  00:15 Найти цитируемый пост)
Вы в пхп или в перл?

В SSI
Цитата(nitr @  12.4.2007,  00:15 Найти цитируемый пост)
все ответы уже даны всеми  на ваш ТОПИК

Так зачем же вы мне тогда отвечаете?
Цитата(nitr @  12.4.2007,  00:15 Найти цитируемый пост)
это я к тому, что для нового вопроса новый пост

Вопрос старый, я не все понял.

Автор: nitr 12.4.2007, 01:00
Цитата(Str!pe @  12.4.2007,  00:38 Найти цитируемый пост)
Цитата(nitr @  12.4.2007,  00:15 )думаю неважноНу почему же... важно.

разводим демагогию? smile думаю не стоит.

Цитата(Str!pe @  12.4.2007,  00:38 Найти цитируемый пост)
Цитата(nitr @  12.4.2007,  00:15 )Вы в пхп или в перл?В SSI

Хорошее уточнее, korob2001 уже давал полное разъяснение по таким вопросам, посмотрите поиском ;)

Цитата(Str!pe @  12.4.2007,  00:38 Найти цитируемый пост)
Так зачем же вы мне тогда отвечаете?

Выяснить - почему пост открыт, и что тут было неясного smile

Автор: korob2001 12.4.2007, 01:56
Цитата(Str!pe @  11.4.2007,  21:38 Найти цитируемый пост)
В SSI

Так с этого и стоило начать.

Файл: /cgi-bin/dat.pl
Код

#!/usr/bin/perl -w
use strict;

my @month = (
    "Января",  "Февраля", "Марта",
    "Апреля",  "Мая",     "Июня",
    "Июля",    "Августа", "Сентября",
    "Октября", "Ноября",  "Декабря"
);

my($d,$m,$y) = (localtime)[3..5];
$y += 1900;

print "Content-type: text/html\n\n";

# Формируем строку и извращаемся над ней
print <<"HTML";
<b>
   <font color="#aa0000">$d</font>
   <span style="color: #0000cc">$month[$m]</span>
   <i style="text-decoration: underline">$y</i> года
</b>
HTML


Теперь инклюдим вывод этой программы через SSI.
Файл: /date_test.shtml
Код

<html>
    <head>
        <title>Date test</title>
    </head>
    <body>
        <center><!--#include virtual="/cgi-bin/dat.pl"--></center>
    </body>
</html>

Можно было бы сделать три инклуда с параметрами, отдельно для даты, отдельно для месяца и отдельно для года. Тогда бы мы извращались над ними непосредственно в одном SSI файле, над каждым по отдельности, но и вызывать исполняемый файл пришлось бы три раза.

Думаю принцип понятен.

Автор: Str!pe 12.4.2007, 10:02
Цитата(nitr @  12.4.2007,  01:00 Найти цитируемый пост)
думаю не стоит.

Ну раз так, в этом случае прошу вас больше на мои посты не отвечать. Это не демагогия, за демагогией прошу во "флейм". Спасибо за внимание, досвидания nitr,.

Цитата(korob2001 @  12.4.2007,  01:56 Найти цитируемый пост)
Файл: /date_test.shtml

Рыдал... я расширение .HTML вместо .SHTML ставил...   smile 

korob2001
Спасибо! Спасибо всем кто помогал smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)