Модераторы: Sardar, Aliance
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчитать кол-во дней в месяце, В заданном месяце заданного года 
:(
    Опции темы
VoDevil
Дата 29.7.2009, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.7.2009

Репутация: нет
Всего: нет



Нужно подсчитать кол-во дней в заданном месяце, заданного года. В js подходящего метода похоже нет? В php есть cal_days_in_month() , но php тоже не всегда скомпилирован с поддержкой календарных функций.

Может быть кто-то из вас, коллеги, уже решал такую задачу? Важен не столько сам код, сколько принцип подсчета. Как я понимаю, подводных камней куча. Из того что сразу приходит в голову: Учесть високосные года и с каждым 100-м годом я слышал "что-то не так" ;) Календарь имеется ввиду Православный, он же русский, он же CAL_JULIAN.

p.s. Может можно из какого-нибудь jQuery вырезать?... ;)
PM MAIL WWW   Вверх
comtat
Дата 29.7.2009, 17:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1310
Регистрация: 2.5.2006
Где: Россия, Казань

Репутация: 4
Всего: 71





--------------------
Рожденный в СССР !!!
ExtJS - мой фреймворк 
PM   Вверх
Michael.de
Дата 31.7.2009, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 346
Регистрация: 22.3.2005
Где: Deutschland

Репутация: 2
Всего: 9



comtat, в твоём примере не учитывается, что: 1583 < год < 2499 (хотя насчёт правой границы я не уверен)

Цитата(VoDevil @  29.7.2009,  17:26 Найти цитируемый пост)
Учесть високосные года и с каждым 100-м годом я слышал "что-то не так" ;) 
В Википедии об этом говорится следующее:
"Год високосен, то есть содержит 366 дней, если:
1. его номер без остатка делится на 4 и не делится на 100 или 
2. его номер делится без остатка на 400.
smile

VoDevil, попробуй следующий код:
Код

<html>
<head>
<script type='text/javascript'>
function leap(y){
 var r=0;
 if (y%4==0&&y%100!=0||y%400==0) r++;
 return r;
}

function showDays(month, year){
 var ret, days;
 days=[31, 28+leap(year), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31];
 if (isNaN(month) || month<1 || month>12 || month!=parseInt(month) || isNaN(year) || year<1583 || year>2499 || year!=parseInt(year)) ret='Wrong Date';
 else ret=days[month-1];
 alert(ret); // <-- Just test
 return ret;
}
</script>
</head>
<!-- Just test: -->
<body onload='showDays(2, 1900);'>
</body>
</html>


Это сообщение отредактировал(а) Michael.de - 31.7.2009, 01:59
PM MAIL   Вверх
VoDevil
Дата 31.7.2009, 14:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.7.2009

Репутация: нет
Всего: нет



А что думаете вот о таком методе, господа - http://snowcore.net/javascript-%D1%83%D0%B...%8F%D1%86%D0%B5 ? Индийский?
PM MAIL WWW   Вверх
Avb
Дата 4.8.2009, 11:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 115
Регистрация: 5.7.2006

Репутация: 4
Всего: 13



Код

function getMonthDays(m, y){
// m - месяц, y - год
//считаем, что месяц мы будем передавать в привычной для нас форме (от 1 до 12)
//учитывая, что объект Date ожидает значения от 0 до 11, отнимаем единицу от m 

m--;

// создаем объект Date с датой на 1-е число нашего месяца
var d = new Date(m+"/01/"+y+" 12:00")

//увеличиваем месяц на единицу, получая таким образом объект Date на 1-е число следующего месяца
d.setMonth(m+1);

//от полученной даты отнимаем одни сутки (86400000 миллисекунд)
//получаем Date на последний день нашего месяца m
d = new Date(d.getTime()-86400000);

//возвращаем день месяца
return  d.getDate();

}

PM MAIL   Вверх
VoDevil
Дата 7.8.2009, 08:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 6
Регистрация: 29.7.2009

Репутация: нет
Всего: нет



Всеже остановился вот на таком варианте:
Код

var daysInMonth = function(_month, _year){
  _month--;
  return 32 - new Date(_year, _month, 32).getDate();
}

С первого взгляда он должен быть наимение ресурсоемким. Если разбираться во внутреннем механизме объекта Date то может это конечно и не правильно.
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0539 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.