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

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

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« : 21 Апреля 2004, 15:00:39 »
Подскажите, есть ли какой то другой пуь добавить к localtime(time) определенное количество дней кроме как писать програму с помощью if & else
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Увеличение даты
« Ответ #1 : 21 Апреля 2004, 15:10:30 »
1. Date::Calc
2. Прибавить к unix-таймстампу количество секунд соответствующее необходимому количеству дней.
2B OR NOT 2B = FF

Оффлайн AliMamed

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

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Увеличение даты
« Ответ #3 : 21 Апреля 2004, 15:21:19 »
#!/usr/bin/perl -w
use strict;
use Time::Local;
my $date="2004-03-30";
my ($year, $mon, $day) = split/\\-/, $date;
my $unix_time=timelocal(0, 0, 0, $day, $mon, $year);
$unix_time+=86400;
($day, $mon, $year) = ((localtime($unix_time))[3,4,5]);
$year+=1900;
$date= sprintf("%04d-%02d-%02d", $year, $mon, $day);
print "$date";
And no religion too...

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #4 : 21 Апреля 2004, 16:11:14 »
Цитировать
Chs:
1. Date::Calc

устрашающее название - описания не нашел, только сам пакет.
Цитировать
Chs:
2. Прибавить к unix-таймстампу количество секунд соответствующее необходимому количеству дней.

можно примерчик?
с таким название как "unix-таймстамп" встречаюсь первый раз
« Последнее редактирование: 21 Апреля 2004, 16:19:33 от Yaroslav »
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Yaroslav

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

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

Оффлайн commander

  • Developer
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1298
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.webtips.ru
Увеличение даты
« Ответ #6 : 21 Апреля 2004, 16:36:23 »
Yaroslav
пардон... немного не так... :
#!/usr/bin/perl -w
use strict;
use Time::Local;
my $date="2004-02-29";
my ($year, $mon, $day) = split/\\-/, $date;
$mon-=1;
my $unix_time=timelocal(0, 0, 0, $day, $mon, $year);
$unix_time+=86400; #ïðèáàâëÿåì îäèí äåíü...
($day, $mon, $year) = ((localtime($unix_time))[3,4,5]);
$year+=1900;
$mon+=1;
$date= sprintf("%04d-%02d-%02d", $year, $mon, $day);
print "$date";

на этот пример никаких проверок на високосный год ставить не НАДО!!!
perldoc Time::Local

в следующий раз прежде чем бросаться сорказными словоизлеяниями... вроде этого:
Цитировать
спасибо за пример, как раз он и страдает всеми перечисленными выше проблемами

попробуйте разобраться в ответе... :)
And no religion too...

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #7 : 21 Апреля 2004, 16:46:59 »
Можно и так, но проще всего:
print localtime(time);                #сейчас
print localtime(time+24*60*60);#завтра
print localtime(time+24*60*60*2);    #послезавтра
а дальше делай что хочеш.
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #8 : 21 Апреля 2004, 16:54:47 »
Хорошо быть новичком. :)
Искал одно, нашел другое. Посмотрите, как такой вариант?
Я правда с трудом соображаю что он делает, но без 2 и 3 строчки работать не хочет.
use HTTP:: Date;
$string = time2str($time);
$time = str2time($string);
$time1=$time+186400;
$string2 = time2str($time1);
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

Оффлайн Меняздесьдавнонет

  • новичЕк
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 5698
  • +0/-0
  • 2
    • Просмотр профиля
    • http://
Увеличение даты
« Ответ #9 : 21 Апреля 2004, 16:59:59 »
этот способ подвержен тем же проблемам, что ты перечислил.
примерный способ тебе сказали.
Для точных тебе привели модуль. Пользуйся им.
Или ты хочешь, чтобы тебе здесь написали код этого модуля со всеми проверками на кол-во дней, високосность и переход на летнее время?
« Последнее редактирование: 21 Апреля 2004, 17:10:42 от NeoNox »

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #10 : 21 Апреля 2004, 17:07:57 »
[moderator]
Брейк! Все кроме ответов я уберу.
Ругаться и выяснять отношения в приват.
The documentations is your friend

Оффлайн NeoNox

  • Координатор
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3012
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #11 : 21 Апреля 2004, 17:16:04 »
Yaroslav
наверняка есть сотня вариантов как добиться того что тебе нужно.
я даже тебе более скажу, большинство модулей для работы со временем работают по одному алгоритму или наследуют модули более высокого уровня. разберись с каждым (я имею ввиду исходный код) из преведенных и ты поймеш как они работают и что ближе всего тебе подходит.
The documentations is your friend

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #12 : 21 Апреля 2004, 17:21:45 »
Цитировать
NeoNox:
Можно и так, но проще всего:
print localtime(time); #сейчас
print localtime(time+24*60*60);#завтра
print localtime(time+24*60*60*2); #послезавтра
а дальше делай что хочеш.

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

Оффлайн AliMamed

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

дайджест ответов
AliMamed:посчитать количество секунд в количестве дней и прибавить
Yaroslav это первое что пришло в голову, но в таком случае скрипт получается очень громозкий, так как нужно учитывать не только месяцы, но и высокосный год
NeoNox print localtime(time+24*60*60*2); #послезавтра
Yaroslav Вот огромное спасибо

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

Оффлайн Yaroslav

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 323
  • +0/-0
  • 0
    • Просмотр профиля
Увеличение даты
« Ответ #14 : 21 Апреля 2004, 18:13:59 »
еще такой вопрос. если есть дата к примеру 20-05-2004
можно ли сравнить ее с localtime(time) что б разница выводилась в количистве дней?
или же только грубое и не точное сравнение типа
.....localtime(time);
20+31-$mday;
Никогда не бойся делать то, что ты не умеешь. Помни, ковчег был построен любителем. Профессионалы построили \"Титаник\".

 

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