URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 6361
[ Назад ]

Исходное сообщение
"вчерашняя дата."

Отправлено bman , 12-Апр-07 15:55 
Здравтвуйте, о Гуру! =)

столкнулся с проблемой...думаю вы сожете помочь..

задача - вывести в ISO вчерашнюю дату (т.е. 20070411)
можно решить путём $day-1 , но как быть с началом нового месяца? получим (20070500)

что посоветуете?

спасибо.


Содержание

Сообщения в этом обсуждении
"вчерашняя дата."
Отправлено pavel_simple , 12-Апр-07 16:05 
>Здравтвуйте, о Гуру! =)
>
>столкнулся с проблемой...думаю вы сожете помочь..
>
>задача - вывести в ISO вчерашнюю дату (т.е. 20070411)
>можно решить путём $day-1 , но как быть с началом нового месяца?
>получим (20070500)
>
>что посоветуете?
>
>спасибо.



"вчерашняя дата."
Отправлено pavel_simple , 12-Апр-07 16:07 
прошу прощения за спам



"вчерашняя дата."
Отправлено vrh , 27-Апр-07 11:33 
>>Здравтвуйте, о Гуру! =)
>>
>>столкнулся с проблемой...думаю вы сожете помочь..
>>
>>задача - вывести в ISO вчерашнюю дату (т.е. 20070411)
>>можно решить путём $day-1 , но как быть с началом нового месяца?
>>получим (20070500)
>>
>>что посоветуете?
>>
>>спасибо.

Кажный день в 23:59:50
===> file НАКАНУНЕ = поместить в ./DIR/day_before/
#!/bin/sh
date +%H > hour
date +%M > min
date +%S > sec
date +%A > weekf
date +%a > weeks
date +%j > yearday
date +%m > month
date +%d > daymonth
date +%w > dayweek
date +%Y  > year
date +%y  > year_00
date +%b  > monthl
<===


Кажный день в 00:00:10
===> file СЕГОДНЯ  = поместить в ./DIR/day_this/
!/bin/sh

date +%H > hour
date +%M > min
date +%S > sec
date +%A > weekf
date +%a > weeks
date +%j > yearday
date +%m > month
date +%d > daymonth
date +%w > dayweek
date +%Y  > year
date +%y  > year_00
date +%b  > monthl
<===
... имея эти 2 файла (сег&накан) лепить можно всяко

do like this, but better...



"вчерашняя дата."
Отправлено pavel_simple , 12-Апр-07 16:06 
date -d 'now -1 month'
у меня работает /Debian Sarge

"вчерашняя дата."
Отправлено NuINu , 12-Апр-07 16:22 
>date -d 'now -1 month'
>у меня работает /Debian Sarge
ну тогда уж
date -d 'now -1 day'
ведь вроде дату то вчерашнюю надо а не месячной давности :)

А так можно поставить модуль:
Time-modules
и реализовать простенький алгоритм.
вычтя сначала день, определив предыдущий месяц, еслимесяц 0 то еще и год вычесть.
а зная год, и месяц можно определить последний день месяца фунцкцией из
DaysInMonth.pm

days_in
ну а потом все это объединить.

А вообще вчерашнюю дату надо узнавать вчера!!!:)


"вчерашняя дата."
Отправлено pavel_simple , 12-Апр-07 16:27 
>можно решить путём $day-1 , но как быть с началом нового месяца? получим (20070500)
вот для этого я и написал date -d 'now -1 month'   ---- ^^^^^^^^^^^^ -- человек и про месяц спросил.
ну так вот --- получил прошлый месяц -- отформатировал (date -d 'now -1 month' +%Y%m), ну и добавил к строчке "01" итого:
echo $(date -d 'now -1 month' +%Y%m)01

"вчерашняя дата."
Отправлено pavel_simple , 12-Апр-07 16:28 
это про бревно и глаз....



"вчерашняя дата."
Отправлено bman , 12-Апр-07 17:45 
>date -d 'now -1 month'
>у меня работает /Debian Sarge

=)
проблема немного глубже... - запускаться всё это будет под win. (ActivePerl), так, что хотелось бы решить проблему как раз на Perle


"вчерашняя дата."
Отправлено madskull , 12-Апр-07 17:56 
>>date -d 'now -1 month'
>>у меня работает /Debian Sarge
>
>=)
>проблема немного глубже... - запускаться всё это будет под win. (ActivePerl), так,
>что хотелось бы решить проблему как раз на Perle


Так почему бы не сделать time()-24*60*60  ?


"вчерашняя дата."
Отправлено bman , 13-Апр-07 11:29 
>>>date -d 'now -1 month'
>>>у меня работает /Debian Sarge
>>
>>=)
>>проблема немного глубже... - запускаться всё это будет под win. (ActivePerl), так,
>>что хотелось бы решить проблему как раз на Perle
>
>
>Так почему бы не сделать time()-24*60*60  ?


большое спасибо за идею.

сделал так:

use Time::Format qw(%time %strftime %manip);
$yesterday = $time{'yyyymmdd', time-24*60*60};
print $yesterday;


"вчерашняя дата."
Отправлено alexvs , 18-Апр-07 16:38 
Можно ещё:

my $ydate = localtime();
sleep(60*60*24);
print $ydate;



"вчерашняя дата."
Отправлено idle , 18-Апр-07 17:55 
>Можно ещё:
>
>my $ydate = localtime();
>sleep(60*60*24);
>print $ydate;
Гениально.



"вчерашняя дата."
Отправлено bingo2 , 18-Апр-07 21:20 
>Можно ещё:
>
>my $ydate = localtime();
>sleep(60*60*24);
>print $ydate;


=)


"вчерашняя дата."
Отправлено pavel_simple , 19-Апр-07 06:32 
>Можно ещё:
>
>my $ydate = localtime();
>sleep(60*60*24);
>print $ydate;

Ж%-) -- сразу чувствуется разносторонность мышления.


"вчерашняя дата."
Отправлено FarID , 20-Апр-07 15:13 
>Здравтвуйте, о Гуру! =)
>
>столкнулся с проблемой...думаю вы сожете помочь..
>
>задача - вывести в ISO вчерашнюю дату (т.е. 20070411)
>можно решить путём $day-1 , но как быть с началом нового месяца?
>получим (20070500)
>
>что посоветуете?
>
>спасибо.


my ($mday, $mon, $year) = (localtime(time - 24 * 60 * 60))[3, 4, 5];
my $yesterday = sprintf '%04d%02d%02d', $year + 1900, $mon + 1, $mday;