Timestamp 1->2. getalldays

Yurik

/dev/null
Timestamp 1->2. getalldays

Есть два таймстемпа, как получить все месяцы (и/или дни) между ними.
Как не делал, везде всплывают баги связанные с переводом времени, вот к примеру:
1048903200 --- 29.03.2003 4:00
1048903200+24*3600=1048989600
1048989600 --- 30.03.2003 5:00

Прибавили 24 часа и вместо 4 стало 5 часов. осенью - то же, но наоборот.

Наиболее правильно было бы вложенным цыклом
PHP:
for ($year=date('Y', $t1) $year<date('Y', $t2); $year++)
 for ($mon=date('m', $t1) $mon<date('m', $t2); $mon++)
  for ($day=1; $day<к-во дней в $mon или date('j', $t2); $day++)
но цикл месяцев нужно делать или от [x до y] или [x до 12] или [1 до y] или [1 до 12] и то же самое с днями.

Вообщем, есть ли нормльное решение? Аналог мыскловского DATE_ADD(date, INTERVAL 1 DAY)?

В PEAR::Date смотрел, вроде нету на эту тему пока ничего

PS. strtotime("+1 day") - та же проблема что и +24*3600
 

Yurik

/dev/null
а при чем тут mktime, тут обратный процесс - date
Или есть идеи как mktime прикрутить?
 

Сергей123

Новичок
Честно - лень сейчас думать. Возможно, что-то связанное с получением из timestamp'а года, месяца и т.д., а потом получение последующих timestamp'ов с помощью mktime и прибавлением Ваших 24*3600 не к timestamp'у, а к соответстующему аргументу mktime'а, выставляя при этом правильно его последний аргумент.

Ничего более вразумительного я сейчас не напишу Ж-)
 

Yurik

/dev/null
Поясню ещё раз задачу (вижу не всем понятно)
есть 2 даты
5.03.2003 и 7.08.2004 (формат не важен, у меня unix_timestamp)
нужно получить: 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8
это основа задачи, реально мне нужно получить ещё годы и дни в массив
$arr[year][mon][day]
который бы начинался
$arr[2003][03][5]
и кончался
$arr[2004][08][7]
но это уже второстепенно
 

Yurik

/dev/null
Все разобрались, отдельное спасибо lovchy за подсказку что ф-ция
mktime() может в качестве месяцев и дней принимать любые значения.
15 месяц - это март следующего года. Или 100 день января решают проблему. Круто :)
 

Сергей123

Новичок
> за подсказку что ф-ция
mktime() может в качестве месяцев и дней принимать любые значения

Это то, что мне надо было написать ещё вчера вечером :)
 
Сверху