Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > JavaScript: для новичков > четность/нечетность недели


Автор: ololok 17.9.2011, 13:40
Данную тему уже понимали http://forum.vingrad.ru/topic-234079.html, но всегда показывает Odd(нечетная).

Собственно: Помогите написать скрипт, который будет определять четность или нечетность и сообщать об этом.

Вот моя заготовка, но она ни чего не сообщает.

Код

<html>
<head>
<title>пример, например</title>
</head>
<body>
<script language="Javascript">
var start=getDate("january 1,2011 00:00:01");
var now=getDate();
var razn=(now-start)/604800000;
var numb = razn%2;
If (numb==1) r_or_b = 'четная';
if (numb==0) r_or_b ='нечетная';
document.write(r_or_b);
</script>
</body>
</html>


заранее спасибо

Автор: InfMag 17.9.2011, 16:02
ololok, для начала выпиливаем аттрибут language у тега script и вписываем type="text/javascript".
А уже потом, к примеру следующий алгоритм:
  • Высчитываем какой сейчас по счёту день в году, из всех 365-и дней;
  • Потом, если я не ошибся, делим этот день на 7, отрезаем остаток Math.floor();
  • И проверяем полученное число кратности 2.
Верно? С начала нужно понять что делать, а уже потом, — как это будет на JS.
«Пишите не на языке, а с применением языка» © 

Автор: InfMag 17.9.2011, 17:17
Забыл один факт, не всегда ведь с понедельника год начинается)

Добавлено через 1 минуту и 24 секунды
Это всё конечно без учёта, что например в Англии неделя начинается с воскресения.

Автор: InfMag 17.9.2011, 18:15
Накидал без упрощения:
Код

<html>
<head>
    <meta http-equiv="content-type" content="text/html; charset=windows-1251" />
    <script type="text/javascript">
    var oddOrEvenWeek = function () {
        var    curDate = new Date(),
            dayShift = 1,
            firstDay = new Date(curDate.getFullYear(), 0, dayShift),
            startYear = new Date(firstDay.getTime()),
            daysInCurYear,
            weekDay = (firstDay.getUTCDay() == 0) ? 7 : firstDay.getUTCDay(); //week day 1-7, 1 is monday, 7 is sunday
        
        while (weekDay > 1) {
            firstDay = new Date(curDate.getFullYear(), 0, (++dayShift));
            weekDay = (firstDay.getUTCDay() == 0) ? 7 : firstDay.getUTCDay();
        }
        
        daysInCurYear = ((curDate.getTime() - startYear.getTime()) / 24 / 60 / 60 / 1000) - (7 - dayShift - 1);
        
        return (Math.floor(daysInCurYear / 7) % 2 == 0) ? 'чётная' : 'не чётная';
    };
    
    alert(oddOrEvenWeek());
    </script>
</head>
</html>

Автор: ololok 17.9.2011, 18:30
InfMag, большое спасибо.

Автор: Dimon23 26.9.2011, 14:46
На 26.09.2011 показывает, что неделя четная (38). Если посмотреть на календарь:  www.macmax.ru/calendar/?y=2011&fm=1&lm=12&mc=3&ds=1&wn=2&fd=2&lang=ru  то неделя получается нечетная (39). Алгоритм реализован с ошибкой

Автор: Dimon23 26.9.2011, 15:08
Вот мой вариант:

Код

function oddweek (stDate) {
        var startDate, now, difference, even_or_odd, info, board;
        now = new Date(stDate);                             // текущая дата
        startDate = new Date(now.getFullYear(), 0, 1);      // дата 01.01.год
        var startDay = startDate.getDay();                  // день недели 0 - воскресенье, 1 - понедельник
        
        difference = Math.round((now-startDate)/ (1000*60*60*24*7));     //604800000); // comment: 604800000=1000millisec*60sec*60min*24hour*7day
        if (startDay <= 4) {difference++;}
        if (now.getDay() == 1) {difference++;}
        difference%2 ? odd_or_even = 'нечетная' : odd_or_even = 'четная';
        info='Идет '+Math.ceil(difference)+' неделя ('+odd_or_even+')';
        $('#year').text(info + " дата: " + formatDate(now, "dd.mm.yyyy"));
    }

Автор: teesync 26.7.2022, 22:44
Модератор: Сообщение скрыто.

Автор: squilia 15.8.2022, 04:11
Модератор: Сообщение скрыто.

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