![]() |
|
Модераторы: korob2001, ginnie |
![]()
|
|
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Всем привет.
Есть две даты $date1 = '2006-01-01'; $date2 = '2006-04-20'; к примеру.... необходимо получить массив всех дат в этом интервале, включая крайние... 2006-01-01 2006-01-02 2006-01-03 ... ... ... 2006-04-19 2006-04-20 Как сделать? заранее благодарен Добавлено @ 17:40 Вообще алгоритм может быть прост... Сначала вычисляем на сколько дней отличается одна дата от другой, наприер на 123, а потом в цикле добавляем к начальному. |
|||
|
||||
| rcdimon |
|
||||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Короче проблему решил. Сначала хотел использовать всякие модули для работы с датой, или хуже того возможности MySQL по работе с датами... в итоге все обошлось двумя подпрограммками
Одна подпрограмма определяет сколько дней в месяце. Причем она понимает високосные года. Как узнать високосный год или нет я узнал на Википедии
Поэтому получается такая подпрограммка
потом я решил написать функцию, которая принимает в качестве параметра дату, а возвращает дату следующего дня
ну и код основной программы, проще некуда
тут правда кроется небольшая опасность. Например если $date2 вообще не является датой, а любой другой сторокой то программа зациклится... А еще она зациклится если $date2 меньше чем $date1... Но это уже другой разговор результат
Это сообщение отредактировал(а) rcdimon - 15.12.2006, 21:59 |
||||||||||
|
|||||||||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
кстати не в оффтоп будет сказано, тут написать еще и валидатор дат... формата YYYY-MM-DD.... Можно конечно напистаь еще функцию, которая понимает кучу других форматов, но сейчас это мне уже не нужно. потому что в программе используется именно такой формат. И любой другой ошибочный
|
|||
|
||||
| arto |
|
|||
|
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1495 Регистрация: 31.10.2004 Репутация: 38 Всего: 40 |
use Date::Local;
use POSIX qw(strftime); sub date_interval ($$) { my ($b,$e) = ([split "-",$_[0]],[split "-",$_[1]]); my ($bb,$ee) = (timelocal (0,0,0,$b->[2],$b->[1]-1,$b->[0]-1900), timelocal (0,0,0,$e->[2],$e->[1]-1,$e->[0]-1900)); my @ret; for (;$bb <= $ee; $bb += 24*60*60) { push @ret,strftime "%Y-%m-%d",localtime ($bb); } return @ret; } |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Какое ужасть... Мне мое больше нравится
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
rcdimon - вот ещё, как вариант.
http://forum.vingrad.ru/topic-90892/hl/date/index.html -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
| rcdimon |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 766 Регистрация: 12.7.2004 Где: Москва Репутация: 1 Всего: 2 |
Гы. сорьки не искал.. Не думал что у кого-то могла возникнуть такая же задача... Только вот непонятно зачем такой сложный и непонятный код в "ручном" методе? Ведь тут все так просто )
|
|||
|
||||
| korob2001 |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 2871 Регистрация: 29.12.2002 Репутация: 31 Всего: 61 |
Работает он быстрее. У меня, с таким интервалом, твой вариант работает на 6 секунд медленнее. Это сообщение отредактировал(а) korob2001 - 17.12.2006, 11:08 -------------------- "Время проходит", - привыкли говорить вы по неверному пониманию. "Время стоит - проходите вы". |
|||
|
||||
![]()
|
| Правила форума "Perl" | |
|
|
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Perl: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |