Форум: "Прочее";
Текущий архив: 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