Новичок
Покинул форум
Сообщений всего: 1
Дата рег-ции: Июль 2011
Помог: 0 раз(а)
|
Здравствуйте. Есть JS-код, который отображает числитель-знаменатель текущей недели (начало рассчета - понедельник).
Код рабочего JS-скрипта (Отобразить)CODE ( javascript):
скопировать код в буфер обмена
<script type="text/javascript" language="JavaScript"> function y2k(number) { return (number < 1000) ? number + 1900 : number; } function getWeek(year,month,day) { var when = new Date(year,month,day); var newYear = new Date(year,0,1); var modDay = newYear.getDay(); if (modDay == 0) modDay=6; else modDay--; var daynum = ((Date.UTC(y2k(year),when.getMonth(),when.getDate(),0,0,0) - Date.UTC(y2k(year),0,1,0,0,0)) /1000/60/60/24) + 1; if (modDay < 4 ) { var weeknum = Math.floor((daynum+modDay-1)/7)+1; } else { var weeknum = Math.floor((daynum+modDay-1)/7); if (weeknum == 0) { year--; var prevNewYear = new Date(year,0,1); var prevmodDay = prevNewYear.getDay(); if (prevmodDay == 0) prevmodDay = 6; else prevmodDay--; if (prevmodDay < 4) weeknum = 53; else weeknum = 52; } } return + weeknum; } var now = new Date(); var fun=getWeek(y2k(now.getYear()),now.getMonth(),now.getDate()); // узнаем дату if(fun/2 == Math.floor(fun/2)) { result=0 // Знаменатель } else { result=1 // Числитель } if (now.getDay() == 0) // Если ВС и ВС=ЗНАМ, ВЫВЕСТИ ЗАВТРА ЧИСЛИТЕЛЬ { if (result==0) { document.write("НА СЛЕДУЮЩЕЙ НЕДЕЛЕ - ЧИСЛИТЕЛЬ") } else { document.write("НА СЛЕДУЮЩЕЙ НЕДЕЛЕ - ЗНАМЕНАТЕЛЬ") } } else { if(result==0) { document.write("ЭТА НЕДЕЛЯ - ЗНАМЕНАТЕЛЬ") } else { document.write("ЭТА НЕДЕЛЯ - ЧИСЛИТЕЛЬ") } }; </script>
Главный его минус - дата берется из часов пользователя, а я бы предпочел вариант, когда время берется с часов сервера хостинга. Поэтому стал искать подобный скрипт на языке PHP.
Нашел такой, чуть переделал, чтобы было только числитель-знаменатель, а не 4 варианта. Вышло вот так: PHP:
скопировать код в буфер обмена
<? $siteglobal['insert']['week'] = ''; $start = 2; $stat=1; for( $i=$day-$start; $i>6 ; $i-=7){ $stat++; } $i=1; for( $i=$stat; $i>2; $i-=2){} $siteglobal['insert']['week'] = "Сегодня: ".date("j.m.Y")."<br />"; switch($i){ case 1: $siteglobal['insert']['week'].= "числитель"; break; case 2: $siteglobal['insert']['week'].= "знаменатель"; break; default: $siteglobal['insert']['week'].= "Неизвестная ошибка!"; } echo $siteglobal['insert']['week']; ?>
Работает нормально, но только до 2012 года. Например, 31 Декабря 2011 года - суббота - показывает знаменатель. 1 Января 2012 года показывает числитель, хотя неделя еще не закончилась. И дальше смена недели начинается всегда во вторник.
Да, через $start можно подредактировать это, но первый скрипт (JS) работает без проблем в новом году.
Таким образом вопрос: можно ли как-то избавиться от необходимости менять $start каждый год? Может у кого есть более продвинутый PHP-скрипт?(Отредактировано автором: 16 Июля, 2011 - 20:26:29)
|