Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Нужен календарь (https://javascript.ru/forum/misc/76357-nuzhen-kalendar.html)

m~r.Nemo 17.02.2019 09:05

Праздники и события я думаю можно вынести в отдельные файлы "html", для праздников один файл, для рабочих суббот второй, для особых событий третий, и четвертый для простых событий которые в календаре не подсвечиваются а только выводятся текстом в диве внизу,

даты в файлах заносить в виде
хх.хх.хххх-хххх г. чтобы можно было указать начало события, или конец события, ну или промежуток годов когда это событие показывается, например новый год начали отмечать в 193х или 194х году, точно не помню, надо в вики посмотреть, значит указыаем 01.01.19хх-хххх, а до этого года нг выводится как будний день,

Рождество отмечалась до революции, при союзе не отмечалось, а после распада союза опять начали отмечать, значит в файл заносим две записи, 07.01.хххх-1917 и 07.01.1991-хххх, что значит что Рождество подсвечиваться до 1917 и после 1991 года...

как то так мне представляется реализация календаря...

m~r.Nemo 20.02.2019 00:37

Вопрос такой, может правильнее заносить даты событий в формате число месяц ≤/≥год?
С знаками ≤ и ≥?
И в случае необходимости указывать года через запятую?
Например 01.07.≤1917,≥1991 Рождество

Как правильнее и универсальнее заносить даты событий/праздников в отдельные файлы?

Rise 20.02.2019 11:24

Цитата:

Сообщение от m~r.Nemo
Например 01.07.≤1917,≥1991 Рождество

А Рождество всегда было что-ли? А зачем Крещение Руси тогда? А до него что было? Перун и компания? Ну вот! И это только про территорию Руси - Россия, Украина и Беларусь. Вы хоть разберитесь в датах что вы хотите. Претендуете на универсальность, но не понимаете что она намного шире. Поэтому и нет одного календаря js на все случаи жизни, всегда есть какие-то ограничения необходимости. Да и сам объект Date в js не безграничен, от -271821 до 275760 года, Григорианская система исчисления, это вам на всякий случай, а вдруг.

m~r.Nemo 21.02.2019 04:37

Rise,
Ну в принципе можно добавить минимальное и максимальное значения для поля ввода, типа
<input type="number" size="4" name="year" min="1900" max="2100" value="2019">


ну для большей универсальности можно чуть больше...

<input type="number" size="4" name="year" min="1850" max="2200" value="2019">


но мне кажется это почему то лишним, ведь никто не будет вводить подобные даты чтоб посмотреть календарь за эти года, поэтому я думаю надо смотреть на вещи реально, и ограничиться датами советского периода(максимум 1900г.) ну и на 50-100 лет вперед, так что крещение Руси и более ранние периоды это уже слишком...

Для начала под словом универсальность я подразумевал максимально удобную навигацию, как два выпадающих списка для выбора числа и месяца и поля ввода для года, с добавлеными кнопками < и > плюс скрытая/появляющаяся кнопка сегодня, и кнопка для изменения ориентации календаря(с меняющимся текстом, стрелка вправо при вертикальном расположении дней и вниз при горизонтальном),

Сначала хотелось бы получить календарь см выше, с первым днем недели пн, подсвеченными днями пред/будущ мес, подсвеченными выходными, и подсвеченными сегодняшним днем недели и числом, а подсветка праздников пока только в планах...
просто я интересуюсь как лучше и правильнее это реализовать...

m~r.Nemo 22.02.2019 00:33

Поскольку календарь предназначен для вывода на страницах сайта, он по умолчанию не может быть универсальным в широком смысле этого слова, а должен быть универсальным для просмотра и навигации именно на сайте, Rise согласись, не очень удобно когда месяц и год выводятся текстом и только две кнопки вперед/назад, удобнее когда подобные кнопки есть и у месяца и у года, неудобно кнопками листать 20-30-50 месяцев или лет, гораздо удобнее когда есть выпадающий список, а ещё удобнее когда возле выпадающего списка есть кнопки вперёд/назад, так придётся делать гораздо меньше телодвижений для просмотра определённого месяца, также выпадающий список не удобен для навигации по годам если надо посмотреть календарь за +-50лет, тут гораздо удобнее поле ввода, но поле ввода не очень удобно для просмотра +-1 год, в этом случае гораздо удобнее кнопки, а когда есть и поле ввода и кнопки это намного удобнее, в одном случае можно воспользоваться кнопками, в другом полем ввода или выпадающим списком, так придётся делать на порядок меньше телодвижений, кнопка "сегодня" как бы мешает и раздражает если она есть всегда, но она намного удобнее для возврата к текущему месяцу, значит (я считаю) её нужно спрятать и показывать только тогда, когда на экране отображается нетекущий месяц, как так я пытаюсь рассуждать...

По поводу подсветки праздников, я хочу вывести всю информацию о празднике(как бы скопировать нужную часть с вики и тд) и пытаюсь разобраться как лучше заносить даты чтобы потом было удобнее, скопировать только часть текста из этих файлов для вставки в Нижний див под сеткой календаря...
как то так...

Rise 22.02.2019 14:42

m~r.Nemo, мне кажется твой пример навигации не очень, дубли всех элементов навигации, много всяких кнопочек, всё это создает не удобство, а сложность, нужно найти какой-то баланс. Совсем не в тему select для чисел, select значит "выбирать", выбирать числа можно прямо из таблицы, в этом как-бы основной смысл их отображения. На поворот таблицы достаточно одной кнопки, работающей по принципу переключателя. Кнопка "сегодня" может быть всегда, если она работает, как указатель на текущее число, а не месяц. Выбор месяца и года бывает что конфигурируется в плагине, как например jquery ui datepicker, там может быть месяц и год текстом, а может быть и выпадающими списками, как вместе, так и по отдельности. Баланс стрелок и списков, как у них в примере, мне кажется как раз оптимальным. Интересно как там работает список лет, всегда показывает плюс минус 10 лет от активного года и этот диапазон динамически изменяется по мере выбора. Так что думаю достаточно будет две кнопки/иконки предыдущий и следующий месяц, два выпадающих списка месяц и год, две кнопки/иконки сегодня и поворот.

Все остальное что нужно, это какая-то штука, которая принимает месяц и год, а затем возвращает массив дат, по сути как в моем примере calendar.update(year, month), только более продвинутая, чтобы каждый элемент массива был не просто число, а некий объект свойств: год, месяц, число, неделя, день недели, еще что-то. Тогда станет совсем всё просто. Навигация будет обращаться к этой штуке при изменении месяца или года, та будет генерировать массив, затем останется отрисовать всё, пройдя циклом по массиву, сверяя данные дат в нем с какими-то другими данными (из объекта в файле например), проставляя нужные классы и тд. Вот здесь пример подобной штуки, как вариант.

Объект в файле - ну это может быть обычный объект js в обычном файле js, но это не точно, но для начала пойдет. Надо просто подумать как его оптимально структурировать, чтобы было удобно сверять данные.

m~r.Nemo 23.02.2019 05:22

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

Сообщение от m~r.Nemo (Сообщение 503886)
и кнопка для изменения ориентации календаря(с меняющимся текстом, стрелка вправо при вертикальном расположении дней и вниз при горизонтальном),

тут я согласен что нужна только одна единственная кнопка работающая как переключатель, я разместил две только для того чтобы показать как она должна меняться, другими словами я просто отобразил как должны меняться свойства border-radius и transform rotate(90deg),а названия дней недели там лишнее, уберу, достаточно одной стрелки...

Пункт второй: кнопка "сегодня" по моему мнению неважно о чём разговор о сегодняшнем числе или месяце, мне представляется что она нужна только для того, чтобы, подчёркиваю в один клик, вернуться к сегодняшнему числу или месяцу, поэтому мне не совсем понятно зачем она нужна при отображении текущего месяца или числа, поэтому я и думаю что её надо скрыть и показывать при любом отклонении от текущего момента...

Пункт третий: навигация по годам,
я пытался искать календари в сети, посмотрел не один десяток вариантов, и пришёл к выводу что навигация на 30-50 лет очень нудна при использовании кнопок, также достаточно муторно с выпадающий списком, сначала на 10 лет, потом второй третий пятый раз? также муторно пользоваться селектом если там будут указаны все года, одним словом я пришёл к выводу что навигация по годам наиболее удобна именно с полем ввода, начал искать, найдя в сети календарь который выложен в первом посте, попробовал поюзать, выяснилось что он оптимален для юзанья на большие периоды (30-50 и более лет), но неудобен при отклонении на год 2-3, из предыдущего опыта юзанья других календарей я пришёл к выводу наиболее оптимальным вариантом будет поле ввода плюс кнопки, на этом варианте и остановился...

m~r.Nemo 23.02.2019 07:43

Пункт четвёртый: навигация по месяцам, из предыдущего опыты юзанья разных календарей пришёл к выводу, что выпадающий список практически одинаков по удобству юзанья с вариантом где месяц выведен текстом с кнопками, просто раньше мне хотелось скорее из соображений эстетических чтобы был элемент формы, что то типа поля ввода или выпадающий список, но впринципе вывести месяц текстом и сьимитировать внешний вид выпадающего списка через стили элементарно, просто добавлю треугольник-стрелку... "∇"

Пункт пятый: навигация по числам - поскольку это не органайзер, не ежедневник, а именно календарь, мне тоже кажется что выбор дат из сетки будет лучше, плюс уменьшиться ширина календаря что органично повлияет на внешний вид, маленький размер текста с большими отступами смотрится не очень... тут возник вопрос, возможно ли как нибудь реализовать чтобы на разных страницах одного и того же сайта отображался календарь на одних стр с выбором числа, а на других без выбора числа?

рано или поздно прийду к подсветке праздников для разных стран, как лучше поступить если вдруг у кого-то не определило страну, и опредилило ошибочно? Может стоит добавить заранее выпадающий список с выбором страны, чтобы посетитель мог вручную выбрать страну?

Rise 23.02.2019 13:22

m~r.Nemo,
п.2 Указатель может быть на 5-м числе, а сегодня допустим 10-е, кнопка "сегодня" передвинет указатель на сегодня. (указатель это выделение цветом при клике или еще что-то, другими словами это текущее выбранное значение). Иногда сегодня делают какой-то дефолтной датой, необязательно называть кнопку "сегодня", это может быть что-то типа "Home", т.е. календарь может стартовать не обязательно с сегодняшней даты.
п.3 Мне как то не очень ручной ввод, календарь принято листать.
п.4 Имитировать навигацию это не эстетика, а обман пользователя.
п.5 Не понимаю зачем это надо, когда есть числа в таблице.

Про выбор стран: а сайт у вас тоже переведен на все эти языки?

m~r.Nemo 23.02.2019 19:36

Rise,
п2. поскольку это календарь для сайта, то его предназначение просто показать сетку календаря за текущий месяц, плюс возможность навигации месяцам и годам, по умолчанию стоит текущие месяц и число, если кому-то надо что-то другое(не текущее число), пусть тот и заморачивается, мне же надо просто календарь с текущим числом/месяцем, как названа кнопка "сегодня", "назад", "вернуться" мне кажется не столь важным..
предназначение этой кнопки - в один клик вернуться к исходному отображении..
п.3 для листания календаря есть кнопки возле поля ввода...
п.4 у каждого свой вкус, сказал индус, натягивая ... обезьяну, не буду спорить спорить, ведь у каждого своё мнение, но мне так больше нравится...
п.5 поскольку в данном случае навигация по числам нужна исключительно для просмотра событий за этот день, то на части страниц показывать календарь с дивом под сеткой, на других страницах этот див (с событиями) лишний, и показать только сетку... В посте выше я ведь определился что селект для выбора числа лишний, и нужен выбор числа из сетки, следовательно на одних страницах с навигацией с выбором из сетки, на других стр в сетке просто текст а не кнопки/иконки... Другими словами на страницах открытых для всех выводится просто сетка, а на закрытых(регистрацией) страницах выводим календарь с дивом под сеткой и навигацией по числам...

А причём перевод? если вдруг скрипт ошибочно определил страну(впн и тд) , и русскоговорящий посетитель хочет видеть подсветку праздников своей страны, а не чужой, почему бы не дать ему возможность исправления вручную...


Часовой пояс GMT +3, время: 21:14.