|
|
|
| Всем привет!
Есть две даты, начальная и конечная.
Задается временной период.
Нужно, чтобы столбиком вывелись даты такого вида:
01.01.2011-07.02.2011
08.01.2011-15.01.2011
в то время как, дату могут ввести: начальную 03.01.2011 и конечную 08.01.2011
т.е. выводятся недели, в которые попадают введеные даты, но диапазон может быть в несколько месяцев, это тоже нужно учесть. И как потом, когда список сформирован, основываясь на текущей дате, выделить жирным текущую неделю в списке.
то что нужно копать в сторону date, mktime и т.д. - знаю, но логика подводит, не могу сообразить. | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 10:24)
| | Неделя начинается с первого числа года? Или с понедельника? Или со стартовой даты? | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 10:24)
| | Если исходить из того, что неделя начинается со стартовой даты, то можно начать отталкиваться от следующего скрипта
<?php
// Границы временного интервала
$begin = mktime(0, 0, 0, 1, 4, 2011); // 04.01.2011
$end = mktime(0, 0, 0, 3, 20, 2011); // 20.03.2011
// Вычисляем разницу в днях
$diff = round(($end - $begin)/60/60/24);
// Цикл начиная со стартовой даты с циклом по 7 дней
for($i = $begin; $i <= $end; $i = $i + 60*60*24*7)
{
if($i <= time() && $i + 60*60*24*7 > time())
{
// Текущая неделя
echo "<strong>".date("d.m.Y", $i)." - ".date("d.m.Y", $i + 60*60*24*7)."</strong><br />\r\n";
}
else
{
echo date("d.m.Y", $i)." - ".date("d.m.Y", $i + 60*60*24*7)."<br />\r\n";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 10:43)
| | мм, не так:
скрипт выдает:
04.01.2011 - 11.01.2011
11.01.2011 - 18.01.2011
18.01.2011 - 25.01.2011
25.01.2011 - 01.02.2011
01.02.2011 - 08.02.2011
08.02.2011 - 15.02.2011
15.02.2011 - 22.02.2011
22.02.2011 - 01.03.2011
01.03.2011 - 08.03.2011
08.03.2011 - 15.03.2011
15.03.2011 - 22.03.2011
но это недели не по календарю.. они сформировались..
неделя выделилась, но первый день на неделе ведь 31 января.
при этом, конечная дата в неделе и начальная дата в неделе - совпадают.
скрипт должен выводить так:
...
24.01.2011 - 30.01.2011
31.01.2011 - 06.02.2011
07.02.2011 - 13.02.2011
...
тогда, как даты: 26.01.2011(начальная) и 09.02.2011(конечная).
т.е. пользователь выбирает промежуток, а я ему должен вывести недели в которые входят дни в заданном промежутке | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 11:08)
| | Т.е. неделя начинается с понедельника (сейчас попробую модифицировать скрипт)? | |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 11:11)
| | Да, недели стандартные с понедельника по воскресенье.
Сложность в том, чтобы имея две даты, вывести те недели, в которые входят эти даты (ну и промежуток дат, если диапазон большой). | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 11:19)
| | > Да, недели стандартные с понедельника по воскресенье.
К слову, в некоторых странах (например, Канада, Израиль, США) неделя считается с воскресенья по субботу. Круто, наверное, начинать и заканчивать неделю отдыхом. | |
|
|
|
|
|
|
|
для: neadekvat
(04.02.2011 в 17:02)
| | ))) никогда не понимал, зачем такой изврат нужен)) чем им "нормальная" неделя не нравится?))) | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 19:43)
| | Исторически так сложилось... для них наша неделя - изврат и происки ортодоксов. Нужно сказать спасибо, что большинство на метрическую систему перешли, а не меряют своим аршином. Хотя в США до сих пор фунтами считают, вместо килограммов - из-за таких вещей иногда спускаемые аппараты разбиваются (когда единицы измерения согласовать забывают, а над аппаратом компании из разных стран работают). До дней недели ни у кого еще руки не дошли, вернее дошли, но международные стандарты в этой области плохо приживаются. | |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 19:48)
| | Оно и понятно, что не дошли... я бы не захотел начинать рабочую неделю с воскресенья и считать его нулём))) | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 11:08)
| | Можно отталкиваться от следующего скрипта
<?php
// Границы временного интервала
$begin = mktime(0, 0, 0, 1, 4, 2011); // 04.01.2010
$end = mktime(0, 0, 0, 3, 20, 2011); // 20.03.2010
// Вычисляем разницу в днях
$diff = ($end - $begin)/60/60/24;
// Ищем ближайший понедельник
for($i = $begin; ; $i = $i - 60*60*24)
{
if(date('N', $i) == 1)
{
$begin = $i;
break;
}
}
// Выводим понедельный календарь
for($i = $begin; $i <= $end; $i = $i + 60*60*24*7)
{
if($i <= time() && $i + 60*60*24*7 > time())
{
// Текущая неделя
echo "<strong>".date("d.m.Y", $i)." - ".date("d.m.Y", $i + 60*60*24*6)."</strong><br />\r\n";
}
else
{
echo date("d.m.Y", $i)." - ".date("d.m.Y", $i + 60*60*24*6)."<br />\r\n";
}
}
?>
|
| |
|
|
|
|
|
|
|
для: cheops
(04.02.2011 в 11:20)
| | Большое спасибо! Я бы так не сделал :) | |
|
|
|
|
|
|
|
для: grafen
(04.02.2011 в 10:24)
| | А каким образом вводятся даты: а) руками; б) используется календарь? | |
|
|
|
|
|
|
|
для: sim5
(04.02.2011 в 12:49)
| | и руками(скриптом), и через календарь.. в зависимости от нужного действия... | |
|
|
|