Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: Общие вопросы > Работа скрипта в opera,mozilla


Автор: kamat0z 28.10.2006, 16:00
Подскажите пожалуйста, что нужно исправить в скрипте, чтобы он работал не только в IE

Цитата

<script LANGUAGE="JavaScript"> 
<!---
var digital=new Date()  
var day=digital.getDate() 
var month=digital.getMonth()+1 
var year=digital.getYear() 

if (year==2006){ 
 if(month==10){ 
  if((day >= 23) && (day <=29)){ 
  document.write("9-ая неделя") } 
  if((day >= 30) && (day <=31)){ 
  document.write("10-ая неделя") }
 }
 if(month==11){
  if((day >= 1) && (day <= 5)){
  document.write("10-ая неделя") }
  if((day >= 6) && (day <= 12)){
  document.write("11-ая неделя") }
  if((day >= 13) && (day <= 19)){
  document.write("12-ая неделя") }
  if((day >= 20) && (day <= 26)){
  document.write("13-ая неделя") }
  if((day >= 27) && (day <= 30)){
  document.write("14-ая неделя") }
 }
 if(month==12){
  if((day >= 1) && (day <= 3)){
  document.write("14-ая неделя") }
  if((day >= 4) && (day <= 10)){
  document.write("15-ая неделя") }
  if((day >= 11) && (day <= 17)){
  document.write("16-ая неделя") }
  if((day >= 18) && (day <= 24)){
  document.write("17-ая неделя") }
  if((day >= 25) && (day <= 31)){
  document.write("18-ая неделя") }
 }
}

//-->
</SCRIPT>

Автор: SelenIT 28.10.2006, 17:08
kamat0z, мда... и до какого времени этот календарь рассчитан? ;)
Проблемы в указанных браузерах возникли из-за устаревшего метода getYear - там он возвращает не 4 цифры, и потому условие не выполняется. Есть метод getFullYear, который всегда возвращает 4 цифры. Но неужели трудно посчитать номер текущей учебной недели как-нибудь так?
Код

var now   = new Date()
// 1 сентября было в этом календарном году или в прошлом?
var year0 = (now.getMonth() < 8) ? now.getFullYear() - 1: now.getFullYear();
var start = new Date(year0,8,1) // дата 1 сентября
start -= (start.getDay()*86400000) // начало недели, на кот. выпало 1 сентября
var numOfWeek = Math.ceil((now-start)/86400000/7) // номер текущей недели
document.write(numOfWeek + "-я неделя")

Автор: kamat0z 9.11.2006, 13:54
SelenIT, спасиба  smile 
С годами я разобрался smile
1 сентября в этом году.
Это учебные недели.
Дело в том, что с какого-то числа в феврале опять начинается с первой недели. 
Фактически скрипт должен делится на две одинаковых части, в которых разница лишь в дате начала отсчета.

Просто, как то еще не очень понятно все это  smile 

Автор: 12345c 9.11.2006, 14:19
...М-м-м, у Вас проблемы с арифметикой или алгеброй? Спросите помощи преподавателя. Но при чём тут JS?

Автор: SelenIT 9.11.2006, 19:16
kamat0z, 
Цитата(kamat0z @  9.11.2006,  13:54 Найти цитируемый пост)
скрипт должен делится на две одинаковых части, в которых разница лишь в дате начала отсчета

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

Например, в нашем случае (можно сделать еще оптимальнее, но некогда):
Код

function countWeek() {
   // массив дат "начал отсчета" в формате [месяц, день], в возрастющем порядке
   var stops = [ [14,2], [1,9] ];
   var now = new Date(), year = now.getFullYear(), start, tmp;
   start = tmp = new Date(year-1, stops[stops.length-1][1]-1, stops[stops.length-1][0]);
   for (var i=0; i < stops.length; i++) { 
      tmp = new Date(year, stops[i][1]-1, stops[i][0]);
      if (tmp <= now) start = tmp;
   }
   start -= start.getDay()*86400000;
   return Math.ceil((now-start)/86400000/7);
}

document.write(countWeek() + "-я неделя")


И неважно, сколько раз в году "обнуляется" отсчет недель - 1, 2 или 15. Все, что нужно - добавить/убавить пару [число, месяц] в соотв. массив в одной-единственной функции...

Упс... опять ошибку в 10 строчках пропустил... мораль №2 - не надо торопиться;)

Автор: kamat0z 23.11.2006, 12:59
Спасибо огромное! smile

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)