Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737
Форумы портала PHP.SU :: Расчет четной и нечетной недели

 PHP.SU

Программирование на PHP, MySQL и другие веб-технологии
PHP.SU Портал     На главную страницу форума Главная     Помощь Помощь     Поиск Поиск     Поиск Яндекс Поиск Яндекс     Вакансии  Пользователи Пользователи


 Страниц (1): [1]   

> Без описания
Virtus-pro
Отправлено: 03 Декабря, 2010 - 18:52:40
Post Id



Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Дек. 2010  
Откуда: Омск


Помог: 0 раз(а)




Здравствуйте.
Так как я администрирую сайт колледжа( уже пожалел ) (Написал сайт колледжа okts55.ru).
Так вот задача у меня следующая, нужно вывести четную и нечетную неделю. Если кто учился в высших учебных заведениях или средних поймут меня что существует четная и нечетная неделя и на этих неделях расписание разное.

Если кто сходу ответит что надо всего лишь сделать так %2 с текущей датой, то не тут то было...

Четная нечетная неделя ведется с 1 сентября. Вот к примеру 1 сентября 2010 года началось с четной недели (число с которого начинается неделя не играет роли!), предположим это понедельник был, то 8 числа уже будет нечетная неделя. Что то подобное пробовал написать, работала функция... Но в одну прекрасную неделю дала сбой, показала не ту неделю, честно уже не помню какую. Посмотрите функцию и может кто найдет огрех в ней:
PHP:
скопировать код в буфер обмена
  1.  
  2. define("STARTSTAMP", "9.1.2010");
  3. function chet ($ye,$mon,$d)
  4. {
  5.    
  6.   $date_exp=explode(".",STARTSTAMP);    
  7.                
  8.   $titles = Array("1", "2");
  9.   $startStamp = mktime(0,0,0,$date_exp['0'],$date_exp['1'],$date_exp['2']);
  10.   $dayOfWeek = date("w", $startStamp);
  11.   if($dayOfWeek == 0)
  12.   {
  13.       $dayOfWeek = 7;
  14.   }
  15.  
  16.   $dst = intval(1-$dayOfWeek);
  17.   $todayDate = date("j",mktime(0,0,1,$mon,$d,$ye));
  18.   $todayDay = date("w",mktime(0,0,1,$mon,$d,$ye));
  19.   if($todayDay == 0)
  20.   {
  21.       $todayDay = 7;
  22.   }
  23.  
  24.   $monday = $todayDate - $todayDay;
  25.   $week = $monday - $dst;
  26.   $parity = $week%2;
  27.   return $titles[$parity];
  28.  
  29. }


где 1 это четная неделя, а 2 это нечетная неделя

(Отредактировано автором: 03 Декабря, 2010 - 18:56:33)

 
 Top
Мелкий Супермодератор
Отправлено: 03 Декабря, 2010 - 19:37:59
Post Id



Активный участник


Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009  
Откуда: Россия, Санкт-Петербург


Помог: 618 раз(а)





Расчёт:
0) получаем текущий день года
1) вычитаем из него день года, на который пришлось 1 сентября.
2) делим на 7
3) проверяем на чётность
4) чётная неделя, видимо, числитель, нечётная - знаменатель получились.

а, вот к чему была проверка в программке, косяк будет после нового года. Сейчас вкурю что и зачем я проверял...
(добавлено)
Вот так:

0) из текущего unixtime вычитаем 2010-09-01
1) делим на количество секунд в неделе
2) проверяем чётность

(Отредактировано автором: 03 Декабря, 2010 - 19:54:45)



-----
PostgreSQL DBA
 
 Top
Virtus-pro
Отправлено: 03 Декабря, 2010 - 20:20:01
Post Id



Новичок


Покинул форум
Сообщений всего: 9
Дата рег-ции: Дек. 2010  
Откуда: Омск


Помог: 0 раз(а)




Мелкий
Что то я попробовал как вы сделать, не совсем получилось

на данный момент у меня суббота,
сделал в файле PHP простую запись

вывело 337.
ладно, вставил в функцию вашу
PHP:
скопировать код в буфер обмена
  1.  
  2. $data=var_dump(((337-date('z',mktime(0,0,0,9,1,2010)))/7)%2);
  3. echo $data;
  4.  

вывело 1

выводило всегда один до 340 дня , вывело 0 ( а это уже вторник) где логика?


вторая функция
PHP:
скопировать код в буфер обмена
  1. $data=mktime(0,0,0,12,4,2010)-mktime(0,0,0,8,30,2010);
  2. $data=$data/604800;
  3. $data=$data%2;
  4. echo $data;
  5.  

сделал так для наглядности 4 число это суббота, я на данный момент считаю.
ввожу 5 число тоже цифра 1, шестое, седьмое тоже цифра один, как так? должно на 6 числе поменяться. и только на 8 числе поменялось.

Хотя попробывал если считать от понедельника, то есть от 30 августа, то нормально считает, но хотелось бы от первого числа считать.

Ладно, спасибо, буду от 30 числа считать )
 
 Top
rednes
Отправлено: 17 Декабря, 2010 - 01:14:13
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Дек. 2010  


Помог: 0 раз(а)




я делал немного не так на сайте своего университета НГУ Днепропетровск, я вот учитываю еще и какой числитель и знаменатель, у нас есть как первый так и второй:

PHP:
скопировать код в буфер обмена
  1.  
  2. $siteglobal['insert']['week'] = '';
  3. $start = 19;
  4. $day = date("z");
  5. $stat=1;
  6. for( $i=$day-$start; $i>6 ; $i-=7){
  7.      $stat++;
  8. }
  9. $i=1;
  10. for( $i=$stat; $i>4; $i-=4){}
  11. $siteglobal['insert']['week'] = "Сегодня: ".date("j.m.Y")."<br />";
  12. switch($i){
  13.      case 1:  $siteglobal['insert']['week'].= "Первый числитель"; break;
  14.      case 2:  $siteglobal['insert']['week'].= "Первый знаменатель"; break;
  15.      case 3:  $siteglobal['insert']['week'].= "Второй числитель"; break;
  16.      case 4:  $siteglobal['insert']['week'].= "Второй знаменатель"; break;
  17.      default: $siteglobal['insert']['week'].= "Неизвестная ошибка!";
  18. }
  19.  
  20. echo $siteglobal['insert']['week'];
  21.  


Писал 2 года назад, точно вспомнить от чего я начинаю отсчет $start = 19; не могу вспомнить, скорее всего это номер дня в году с которого начинается отсчет 1го числителя (1е сентября) иногда после НГ стоит проверить правильность и при необходимости подкорректировать, хотя я за 2 года не трогал, и все ок. Удачи Подмигивание
 
 Top
VladChernetsky
Отправлено: 08 Июля, 2014 - 11:21:26
Post Id


Новичок


Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2014  


Помог: 0 раз(а)




<?php
$varWeek = strftime("%V");
echo $varWeek."<br/>";
if(($varWeek % 2) == 0)
echo "Variable is even";
else
echo "Variable isn't even";

?>
 
 Top
Страниц (1): [1]
Сейчас эту тему просматривают: 0 (гостей: 0, зарегистрированных: 0)
« Программирование на PHP »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 



Powered by PHP  Powered By MySQL  Powered by Nginx  Valid CSS  RSS

 
Powered by ExBB FM 1.0 RC1. InvisionExBB