Автор Тема: Увеличение даты  (Прочитано 15063 раз)

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

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Увеличение даты
« Ответ #15 : 21 Апреля 2004, 18:16:21 »
ты понимаешь что такое time?
ну, будем исповедоваться?

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #16 : 21 Апреля 2004, 18:19:35 »
Цитировать
AliMamed:
AliMamed:посчитать количество секунд в количестве дней и прибавить

повторяюсь, я не знал о том что можно просто добавить количество секунд именно к localtime(time);
кстати в yandex & perldoc я єтого не нашел.
до этого я думал о
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst)=localtime(time);
$lastdata=2*60*60*24;
$sec+$lastdata;
вот и представь куда завели мои мысли... :)
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #17 : 21 Апреля 2004, 18:20:47 »
Цитировать
AliMamed:
ты понимаешь что такое time?

может не совсем, обьясни
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Увеличение даты
« Ответ #18 : 21 Апреля 2004, 18:23:18 »
ну и зря не нашел. лучше искать было. ты сейчас просто совершенно не понимаешь что это за функции

Цитировать
localtime -- Converts a time as returned by the time function to a 9-element list with the time analyzed for the local time zone


Цитировать
time -- Returns the number of non-leap seconds since whatever time the system considers to be the epoch (that\'s 00:00:00, January 1, 1904 for Mac OS, and 00:00:00 UTC, January 1, 1970 for most other systems).


если ты внимательно это прочитаешь то вопроса как сравнить и как прибавить относительно переменных с датами у тебя возникать больше не должно
ну, будем исповедоваться?

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #19 : 21 Апреля 2004, 18:26:11 »
А вот с этого места начни изучать модуль предложенный Chs
http://search.cpan.org/~stbey/Date-Calc-5.3/Calc.pod
The documentations is your friend

Оффлайн AliMamed

  • \\o/ ali akbar \\o/
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 2409
  • +2/-0
  • 2
    • Просмотр профиля
    • http://alimamed.pp.ru
Увеличение даты
« Ответ #20 : 21 Апреля 2004, 18:29:06 »
т.е. по русски говоря

time - возвращает количество секунд от начала эпохи числом. именно к этому количеству надо прибавлять/отнимать, именно его надо использовать чтобы сравнивать с другими датами. в базах предпочтительно хранить даты именно в этом формате и лишь для показа пользователю конвертить их в человекопонятную дату.

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

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #21 : 21 Апреля 2004, 18:38:08 »
Строго говоря localtime в списковом контексте возвращяет список а в скалярном - дату в человекопонятном формате.
Например $loc = (localtime(time+24*60*60))[5]+1900:
вернет "завтрашний" год и так далее..
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #22 : 21 Апреля 2004, 18:40:43 »
Цитировать
AliMamed:
time - возвращает количество секунд от начала эпохи числом. именно к этому количеству надо прибавлять/отнимать, именно его надо использовать чтобы сравнивать с другими датами. в базах предпочтительно хранить даты именно в этом формате и лишь для показа пользователю конвертить их в человекопонятную дату.

localtime как раз возвращает тебе список, который позволит тебе сформировать такую человекопонятную дату.

исходя из всего вышесказаного должна работать функция
print localtime(3361730310451201);
но она не работает.. :(
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #23 : 21 Апреля 2004, 18:53:19 »
Цитировать
NeoNox:
Строго говоря localtime в списковом контексте возвращяет список а в скалярном - дату в человекопонятном формате.
Например $loc = (localtime(time+24*60*60))[5]+1900:
вернет "завтрашний" год и так далее..

это уже стало понятно еще после первого сообщения как добавить дату, а вот как вывести разницу в днях еще не понятно.
хоть скажите с помощью localtime(time) это возможно сделать или только Date::Calc мне поможет?
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #24 : 21 Апреля 2004, 18:55:34 »
print time;
> 1082559181
print scalar localtime(1082559181);
> Wed Apr 21 17:53:01 2004


Внимательнее читай каждый пост.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #25 : 21 Апреля 2004, 19:00:13 »
Цитировать
Yaroslav:
хоть скажите с помощью localtime(time) это возможно сделать

Запросто.
Береш карандаш в руку и пишеш сначала на бумаге алгоритм.
Потом реализуеш его на Perl/
Вот и все.

Цитировать
Yaroslav:
или только Date::Calc мне поможет?

В этом модуле уже есть все что тебе нужно:
http://search.cpan.org/~stbey/Date-Calc-5.3/Calc.pod#RECIPES
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #26 : 21 Апреля 2004, 19:24:08 »
Yaroslav кстати прямо для тебя неаписано в факе:
perldoc -q date
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #27 : 22 Апреля 2004, 11:38:37 »
Спасибо AliMamed и Огромное спасибо NeoNox
за монотонное обьяснение что формат даті должен хранится в "time". теперь это выглядит так:
(..,..,..,..,$newdata,$lastdata,..)=split(/`/,$file);
$dey=int(($lastdata-$newdata)/24/60/60);
($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime($newdata); $year+=1900; $mon+=1;
($sec,$min,$hour,$mday,$mon,$year,$wday)=localtime($lastdata); $year+=1900; $mon+=1;
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн DamonLSD

  • Завсегдатай
  • Пользователь
  • **
  • Сообщений: 53
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #28 : 08 Февраля 2009, 20:58:36 »
Цитировать
Yaroslav:
еще такой вопрос. если есть дата к примеру 20-05-2004
можно ли сравнить ее с localtime(time) что б разница выводилась в количистве дней?

ВСЕМ привет! :)
на днях тоже столкнулся с вычислением разницы двух дат и конечно же хотелось обойтись стандартными модулями. Вот, что у меня получилось ... может кому-то пригодицца
#!D:/www/Perl/bin/perl.exe

print "Content-type: text/html; charset=windows-1251\\n\\n";

use 
strict;
use 
Time::Local;

# Текущая дата
my ($sec,$min,$hrn,$day,$mon,$yrn,$wkn,$ydn,$dst) = localtime(time);
  
$mon $mon+1;
  if (
$mon 10) {$mon "0$mon";}
  if (
$day 10) {$day "0$day";}
  if (
$hrn 10) {$hrn "0$hrn";}
  if (
$min 10) {$min "0$min";}
  if (
$sec 10) {$sec "0$sec";}
  
$yrn 1900 $yrn;
  
my $date"$day\\-$mon\\-$yrn";
  
my $time"$hrn\\:$min\\:$sec";

# Начальная дата
my $begDate "01-01-2009";
# Конечная дата
my $endDate "01-01-2010";

# Парсим начальную дату на день месяц и год, разделитель "-"
my ($beg1$beg2$beg3) = split (/-/,$begDate);
# Парсим конечную дату на день месяц и год, разделитель "-"
my ($end1$end2$end3) = split (/-/,$endDate);

# Вычисляем сколько прошло секунд до начальной даты
my $begDateSec timelocal(000$beg1$beg2-1$beg3);
# Вычисляем сколько прошло секунд до конечной даты
my $endDateSec timelocal(000$end1$end2-1$end3);

# Вычисляем разницу в секундах от начальной даты до конечной
my $difDateSec $endDateSec $begDateSec;
# Вычисляем разницу в сутках от начальной даты до конечной
my $difDateSut $difDateSec 86400;

# Вывод результатов
print "Текущая дата: $date $time (" time " сек)";
print 
"

"
;
print 
"Начальная дата: $begDate ($begDateSec сек)";
print 
"
"
;
print 
"Конечная дата:  $endDate ($endDateSec сек)";
print 
"

"
;
print 
"Разница: $difDateSut сут ($difDateSec сек)";

Результат
Текущая дата08-02-2009 20:56:52 (1234115812 сек)

Начальная дата01-01-2009 (1230757200 сек)
Конечная дата01-01-2010 (1262293200 сек)

Разница365 сут (31536000 сек)
Good Luck,
   Damon LSD.

 

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