Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2011.12.25;
Скачать: CL | DM;

Вниз

php цикл по датам   Найти похожие ветки 

 
Vjcr   (2011-09-12 16:09) [0]

имеется дата понедельника. ну или любая другая дата. (не unix таймстамп, а дата)
нужно получить все даты этой же недели.
вроде бы все просто - можно использовать mktime.
но напарываемся на необходимость ручного контроля последних дней месяца.
кто знает более прямой путь?

PS php необновляемая, версия 5.2.6 эмбеддед.
новых функций релиза 5.3 нету.


 
Anatoly Podgoretsky ©   (2011-09-12 16:22) [1]

> Vjcr  (12.09.2011 16:09:00)  [0]

"а дата" что это такое?


 
Vjcr   (2011-09-12 16:26) [2]

Это тип DateTime


 
Anatoly Podgoretsky ©   (2011-09-12 16:32) [3]

Без кода ничего хорошего не получится.


 
Vjcr   (2011-09-12 16:37) [4]

Ну вот код

/* следующий "понедельник" */
function get_next_day_of_week($wday){
 $d = time();
 $dte = date_create();

 for ($i=1;$i<=7;$i++){
  $dte = inc_date($d,$i);
  if (date_format($dte,"w") == $wday){
   return $dte;
  }
 }
}


Получили следующий понедельник.
Теперь нужно еще четыре следующие за ним даты


 
Vjcr   (2011-09-12 16:39) [5]

/* принимает тайм стамп и возвращает дату */
function inc_date($dte,$days){
 $new_dte = date_create();
 $arr = getdate($dte);
 date_date_set($new_dte,$arr["year"],$arr["mon"], $arr["mday"] + $days);
 return $new_dte;
}


 
Anatoly Podgoretsky ©   (2011-09-12 16:52) [6]


> Теперь нужно еще четыре следующие за ним даты

+1, +2 ...


 
Vjcr   (2011-09-12 16:55) [7]

ага.
+1 или + 2 я делаю, имея таймстамп.
а после get_next_day_of_week у меня понедельник не в виде таймстампа, а в виде DateTime

Я его конечно разложу на d,m,y
И напорюсь на ручной контроль границ при инкременте дня.


 
Inovet ©   (2011-09-12 17:10) [8]

> [7] Vjcr   (12.09.11 16:55)
> а в виде DateTime

Вот к нему и +1, +2


 
Vjcr   (2011-09-12 17:18) [9]

Вот к нему и +1, +2

И напорюсь на ручной контроль границ при инкременте дня.


 
Inovet ©   (2011-09-12 17:32) [10]

> [9] Vjcr   (12.09.11 17:18)
> Вот к нему и +1, +2
>
> И напорюсь на ручной контроль границ при инкременте дня.

Границ чего?


 
Vjcr   (2011-09-12 17:34) [11]

первая дата: двадцать восьмое февраля.
нужна следующая дата.
прибавляем ко дню единицу.

дальше надо смотреть:
1. сколько дней в феврале
2. високосный год или нет.

Границы месяцев - вот чего.


 
Дмитрий С ©   (2011-09-12 17:38) [12]

ну и вопрос.
вы ман читали по mktime ?


Функцию mktime() удобно использовать для выполнения арифметических операций с датами, так как она вычисляет верные значения при некорректных аргументах. Например, в следующем примере каждая строка выведет "Jan-01-1998".

Пример #1 Пример использования функции mktime()

<?php
echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 13, 1, 1997));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 1998));
echo date("M-d-Y", mktime(0, 0, 0, 1, 1, 98));
?>



 
Inovet ©   (2011-09-12 17:38) [13]

> [11] Vjcr   (12.09.11 17:34)
> первая дата: двадцать восьмое февраля.
> нужна следующая дата.
> прибавляем ко дню единицу.

получаем 1 марта в невисокосный год и 29 февраля в високосный.


 
Vjcr   (2011-09-12 17:40) [14]

вы ман читали по mktime ?

А вы?
Мне не таймстамп нужен.


 
Дмитрий С ©   (2011-09-12 17:41) [15]

А что мешает получить из него дату в нужном формате?


 
Vjcr   (2011-09-12 17:42) [16]

echo date("M-d-Y", mktime(0, 0, 0, 12, 32, 1997));

И не строка нужна.

Нужен DateTime.


 
Дмитрий С ©   (2011-09-12 17:47) [17]

date_in_timestamp / A  + B = date_in_datetime
Неужели это так трудно?


 
Vjcr   (2011-09-12 17:49) [18]

нет не трудно.
знаешь почему?
потому что я умный.

вопрос-то  знаешь в чем был?

написать цикл по датам, не прибегая к пользовательским функциям.


 
Дмитрий С ©   (2011-09-12 17:53) [19]


> потому что я умный.

Ахаха)

Тебе уже кстати ответили. Только ты сильно умный:)


 
Дмитрий С ©   (2011-09-12 18:04) [20]

А если серьезно.

date_modify
date_add
- эти в 5 2 6 не действуют?


 
Омлет ©   (2011-09-12 19:41) [21]

Поскольку 5.2.6, то переводи в timestamp и работай с ним. timestamp - это целое число секунд. Чтобы прибавить один день, надо прибавить 86400 к переменной. Так и прибавляй, пока не получишь тот же день недели или какой тебе надо.


 
Омлет ©   (2011-09-12 19:43) [22]

А если есть PEER.Calendar, то всё ещё проще.


 
Омлет ©   (2011-09-12 19:45) [23]

И будем надеяться, проблема 2036 твоему устройству не грозит )



Страницы: 1 вся ветка

Текущий архив: 2011.12.25;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.009 c
11-1236511074
Jon
2009-03-08 14:17
2011.12.25
CreateRestrictedToken


2-1315213540
lesstab
2011-09-05 13:05
2011.12.25
Поле не принимает значения


15-1315340989
Юрий
2011-09-07 00:29
2011.12.25
С днем рождения ! 7 сентября 2011 среда


2-1316021139
pravd
2011-09-14 21:25
2011.12.25
работа с БД paradox


2-1316405617
i2e
2011-09-19 08:13
2011.12.25
Прозрачный фон при выводе текста