Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
MySQL на примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Вывести недели во временном промежутке
 
 автор: grafen   (04.02.2011 в 10:24)   письмо автору
 
 

Всем привет!

Есть две даты, начальная и конечная.
Задается временной период.
Нужно, чтобы столбиком вывелись даты такого вида:

01.01.2011-07.02.2011
08.01.2011-15.01.2011

в то время как, дату могут ввести: начальную 03.01.2011 и конечную 08.01.2011
т.е. выводятся недели, в которые попадают введеные даты, но диапазон может быть в несколько месяцев, это тоже нужно учесть. И как потом, когда список сформирован, основываясь на текущей дате, выделить жирным текущую неделю в списке.

то что нужно копать в сторону date, mktime и т.д. - знаю, но логика подводит, не могу сообразить.

  Ответить  
 
 автор: cheops   (04.02.2011 в 10:30)   письмо автору
 
   для: grafen   (04.02.2011 в 10:24)
 

Неделя начинается с первого числа года? Или с понедельника? Или со стартовой даты?

  Ответить  
 
 автор: cheops   (04.02.2011 в 10:43)   письмо автору
 
   для: grafen   (04.02.2011 в 10:24)
 

Если исходить из того, что неделя начинается со стартовой даты, то можно начать отталкиваться от следующего скрипта
<?php 
  
// Границы временного интервала
  
$begin mktime(000142011); // 04.01.2011
  
$end mktime(0003202011);  // 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*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";
    }
  }
?>

  Ответить  
 
 автор: grafen   (04.02.2011 в 11:08)   письмо автору
 
   для: 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(конечная).

т.е. пользователь выбирает промежуток, а я ему должен вывести недели в которые входят дни в заданном промежутке

  Ответить  
 
 автор: cheops   (04.02.2011 в 11:11)   письмо автору
 
   для: grafen   (04.02.2011 в 11:08)
 

Т.е. неделя начинается с понедельника (сейчас попробую модифицировать скрипт)?

  Ответить  
 
 автор: grafen   (04.02.2011 в 11:19)   письмо автору
 
   для: cheops   (04.02.2011 в 11:11)
 

Да, недели стандартные с понедельника по воскресенье.
Сложность в том, чтобы имея две даты, вывести те недели, в которые входят эти даты (ну и промежуток дат, если диапазон большой).

  Ответить  
 
 автор: neadekvat   (04.02.2011 в 17:02)   письмо автору
 
   для: grafen   (04.02.2011 в 11:19)
 

> Да, недели стандартные с понедельника по воскресенье.
К слову, в некоторых странах (например, Канада, Израиль, США) неделя считается с воскресенья по субботу. Круто, наверное, начинать и заканчивать неделю отдыхом.

  Ответить  
 
 автор: grafen   (04.02.2011 в 19:43)   письмо автору
 
   для: neadekvat   (04.02.2011 в 17:02)
 

))) никогда не понимал, зачем такой изврат нужен)) чем им "нормальная" неделя не нравится?)))

  Ответить  
 
 автор: cheops   (04.02.2011 в 19:48)   письмо автору
 
   для: grafen   (04.02.2011 в 19:43)
 

Исторически так сложилось... для них наша неделя - изврат и происки ортодоксов. Нужно сказать спасибо, что большинство на метрическую систему перешли, а не меряют своим аршином. Хотя в США до сих пор фунтами считают, вместо килограммов - из-за таких вещей иногда спускаемые аппараты разбиваются (когда единицы измерения согласовать забывают, а над аппаратом компании из разных стран работают). До дней недели ни у кого еще руки не дошли, вернее дошли, но международные стандарты в этой области плохо приживаются.

  Ответить  
 
 автор: grafen   (04.02.2011 в 19:51)   письмо автору
 
   для: cheops   (04.02.2011 в 19:48)
 

Оно и понятно, что не дошли... я бы не захотел начинать рабочую неделю с воскресенья и считать его нулём)))

  Ответить  
 
 автор: cheops   (04.02.2011 в 11:20)   письмо автору
 
   для: grafen   (04.02.2011 в 11:08)
 

Можно отталкиваться от следующего скрипта
<?php 
  
// Границы временного интервала
  
$begin mktime(000142011); // 04.01.2010
  
$end mktime(0003202011);  // 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*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";
    }
  }
?>

  Ответить  
 
 автор: grafen   (04.02.2011 в 19:41)   письмо автору
 
   для: cheops   (04.02.2011 в 11:20)
 

Большое спасибо! Я бы так не сделал :)

  Ответить  
 
 автор: sim5   (04.02.2011 в 12:49)   письмо автору
 
   для: grafen   (04.02.2011 в 10:24)
 

А каким образом вводятся даты: а) руками; б) используется календарь?

  Ответить  
 
 автор: grafen   (04.02.2011 в 19:36)   письмо автору
 
   для: sim5   (04.02.2011 в 12:49)
 

и руками(скриптом), и через календарь.. в зависимости от нужного действия...

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования