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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Количество недель в диапазоне дат, посчитать количество полных недельй 
V
    Опции темы
Prontit
  Дата 29.4.2013, 15:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Добрый день!

Собственно сабж. Есть два datepicker, выбираю в них даты. Мне нужны посчитать количество недель между этими датами. 

Допустим в первом выбираю понедельник 24.04.2013 во-втором пятницу 03.05.2013, тут 1 неделя. Если выбираю так же понедельник 24.04.2013, но пятницу уже 10.05.2013, тут 2 недели. Думаю логика понятна.
Погуглил по функциям JS, ничего подходящего не нашел. Есть ли какой-то стандартный способ, или придется "велосипед изобретать"

Заранее благодарю.
PM MAIL ICQ Skype   Вверх
CruorVult
Дата 29.4.2013, 16:35 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 868
Регистрация: 24.9.2008
Где: г.Киев, Украина

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



Вот так можно узнать количество дней
Код

var start = new Date(2013, 3, 24);
var end = new Date(2013, 4, 3);
var days = (end - start)/1000/60/60/24/7;


Если алгоритм простой, т.е 8 дней - это уже 2 недели, то можно поделить на 7 и округлить до высшего значения (Math.ceil).
Если нужно учитывать еще и дни недели, то можно немного дописать логику, ничего сложного здесь нет. Велосипедом это не могу назвать
PM MAIL Skype   Вверх
Prontit
Дата 30.4.2013, 06:18 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(CruorVult @ 29.4.2013,  16:35)
Вот так можно узнать количество дней
Код

var start = new Date(2013, 3, 24);
var end = new Date(2013, 4, 3);
var days = (end - start)/1000/60/60/24/7;


Если алгоритм простой, т.е 8 дней - это уже 2 недели, то можно поделить на 7 и округлить до высшего значения (Math.ceil).
Если нужно учитывать еще и дни недели, то можно немного дописать логику, ничего сложного здесь нет. Велосипедом это не могу назвать

выполнив твой код, у меня получилось 1.2857142857142858, это явно не количество дней. 
PM MAIL ICQ Skype   Вверх
ksnk
Дата 30.4.2013, 06:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Цитата(Prontit @  29.4.2013,  15:38 Найти цитируемый пост)
Есть два datepicker, выбираю в них даты. Мне нужны посчитать количество недель между этими датами. 


Цитата(Prontit @  30.4.2013,  06:18 Найти цитируемый пост)
выполнив твой код, у меня получилось 1.2857142857142858, это явно не количество дней


Так на самом деле надо было количество дней?


--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Prontit
Дата 30.4.2013, 08:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ksnk @ 30.4.2013,  06:51)
Цитата(Prontit @  29.4.2013,  15:38 Найти цитируемый пост)
Есть два datepicker, выбираю в них даты. Мне нужны посчитать количество недель между этими датами. 


Цитата(Prontit @  30.4.2013,  06:18 Найти цитируемый пост)
выполнив твой код, у меня получилось 1.2857142857142858, это явно не количество дней


Так на самом деле надо было количество дней?

нет, нужно было именно количество недель. Я понял,  1.2857142857142858 округляю, получаю 1, это неделя. Проблема возникает, когда выбираю и там и там понедельник. Он так же считает что это 1 неделя, а нужно чтобы 2 считал.

думал делать проверку на дни недели, если одинаковые то +1 к недели, но почему-то не работает, вот так

Код

date_one = document.getElementById("datepicker_1");
day_for_1 = date_one.value.substr(0,2); 
mounth_for_1 = date_one.value.substr(3,2); 
year_for_1 = date_one.value.substr(6,4);

var start = new Date(year_for_1, mounth_for_1, day_for_1);

alert(end.getDay()); //тут выдает совсем не то что нужно

PM MAIL ICQ Skype   Вверх
ksnk
Дата 30.4.2013, 09:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


прохожий
****


Профиль
Группа: Комодератор
Сообщений: 6855
Регистрация: 13.4.2007
Где: СПб

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



Где в коде 
Цитата(Prontit @  30.4.2013,  08:09 Найти цитируемый пост)
если одинаковые то +1 к недели, 

? То, что end не инициализирован не смущает? 



--------------------
Человеку свойственно ошибаться, программисту свойственно ошибаться профессионально ! user posted image
PM MAIL WWW Skype   Вверх
Prontit
Дата 30.4.2013, 09:24 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(ksnk @ 30.4.2013,  09:11)
Где в коде 
Цитата(Prontit @  30.4.2013,  08:09 Найти цитируемый пост)
если одинаковые то +1 к недели, 

? То, что end не инициализирован не смущает?

все инициализировано, просто не тот кусок скопировал

Код

date_two = document.getElementById("datepicker_2");
day_for_2 = date_two.value.substr(0,2)*1; 
mounth_for_2 = date_two.value.substr(3,2)*1; 
year_for_2 = date_two.value.substr(6,4)*1; 

var end = new Date(year_for_2, mounth_for_2, day_for_2);


думал что проблема в том что нули в номере месяца и дня, поэтому сделал *1, но не помогло

Код

alert(end.getDay());


что попало выдает...


PM MAIL ICQ Skype   Вверх
Prontit
Дата 30.4.2013, 12:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



кто подскажет, почему функция getDay() не работает если я сам дату формирую?
PM MAIL ICQ Skype   Вверх
baldina
Дата 30.4.2013, 12:52 (ссылка) |    (голосов:1) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 3433
Регистрация: 5.12.2007
Где: Москва

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



видимо потому что неправильно формируешь. покажи как это делаешь
Цитата(Prontit @  30.4.2013,  08:09 Найти цитируемый пост)
Я понял,  1.2857142857142858 округляю, получаю 1, это неделя. Проблема возникает, когда выбираю и там и там понедельник. Он так же считает что это 1 неделя, а нужно чтобы 2 считал.

тебе же сказали
Цитата(CruorVult @  29.4.2013,  16:35 Найти цитируемый пост)
округлить до высшего значения (Math.ceil).

1.2857142857142858 это больше недели, не правда ли? от понедельника к понедельнику - 8/7=1.142857142857143, ceil(1.14..)=2
если и начальный день (start) входит в расчет, то нужно прибавлять 1: (end-start+1)

итого:
Код

var start = new Date(2013, 4, 1)
var end = new Date(2013, 4, 8)
var weeks = Math.ceil((end - start+1)/1000/60/60/24/7)
alert(weeks)

http://jsfiddle.net/P5C5F/
PM MAIL   Вверх
Prontit
Дата 30.4.2013, 14:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Цитата(baldina @ 30.4.2013,  12:52)
видимо потому что неправильно формируешь. покажи как это делаешь
Цитата(Prontit @  30.4.2013,  08:09 Найти цитируемый пост)
Я понял,  1.2857142857142858 округляю, получаю 1, это неделя. Проблема возникает, когда выбираю и там и там понедельник. Он так же считает что это 1 неделя, а нужно чтобы 2 считал.

тебе же сказали
Цитата(CruorVult @  29.4.2013,  16:35 Найти цитируемый пост)
округлить до высшего значения (Math.ceil).

1.2857142857142858 это больше недели, не правда ли? от понедельника к понедельнику - 8/7=1.142857142857143, ceil(1.14..)=2
если и начальный день (start) входит в расчет, то нужно прибавлять 1: (end-start+1)

итого:
Код

var start = new Date(2013, 4, 1)
var end = new Date(2013, 4, 8)
var weeks = Math.ceil((end - start+1)/1000/60/60/24/7)
alert(weeks)

http://jsfiddle.net/P5C5F/

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


 




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


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

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