Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Прочее";
Текущий архив: 2011.12.25;
Скачать: [xml.tar.bz2];

Вниз

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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.49 MB
Время: 0.005 c
15-1315548799
user1987
2011-09-09 10:13
2011.12.25
Часы на рабочем столе


6-1249275041
Dmitriy
2009-08-03 08:50
2011.12.25
разделение трафика


2-1316260397
KateriNa
2011-09-17 15:53
2011.12.25
Помогите пожалуйста


2-1316452365
Leon-Z
2011-09-19 21:12
2011.12.25
Рисунок *.jpg ?


2-1316153126
alexdn
2011-09-16 10:05
2011.12.25
TrackBar





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский