Содержание сайта =>> Популярно о науке =>> Астрономия =>> Современный календарь
Сайт «Разум или вера?», 14.12.2015, http://razumru.ru/science/popular/prog/prog.htm
 

Программа пересчёта дат.
Дополнение к статье: А. М. Крайнев, «Современный календарь»,
http://razumru.ru/science/popular/krainev.htm

Программа написана на языке «JavaScript» и работает в браузере на машине клиента, не используя ресурсы сервера. При работе с программой эту страницу (вкладку) не следует закрывать. Её закрытие приведёт к выгрузке программы из оперативной памяти и все полученные результаты расчётов будут утеряны. Работа программы проверялась в браузерах Internet Explorer 8.0.6001.18702, Google Chrome 44.0.2403.107 m, Opera 30.0.1835.125, Firefox 39.0.

При нажатии на кнопку «Запуск программы» откроется рабочее окно (или вкладка), в котором отобразится таблица ввода исходных дат, см. рисунок. Над таблицей – ряд выключателей, указывающих календари, по которым возможно будет вводить исходные даты для расчёта, а рассчитанная информация будет выводиться на экран в таблицу «Результаты». Отключив любые из них и нажав кнопку «Повторить вывод», можно избавиться от визуализации лишних колонок обеих таблиц, мешающих восприятию. Всегда остаётся включённой левая колонка, отображающая шкалу времени («Шкала вр.»). Вне зависимости от положения выключателей, расчёт производится по всем календарям и вся рассчитанная информация хранится в оперативной памяти. Включив ранее отключённые колонки и ещё раз повторив вывод, можно вновь отобразить ранее рассчитанные результаты по всем календарям.

УпрГК
ГК
УпрЮК
ЮК (аст.)
ЮК (ист.)
УпрВК
ВК
День нед.
Шкала вр. УпрГК ГК УпрЮК ЮК (аст.) ЮК (ист.) УпрВК ВК -
-
Рассчитать диапазон
Отобразить время расчёта и вывода

Вид таблицы ввода исходных дат
 

При запуске программы и после каждого акта расчёта фокус ввода устанавливается в колонке «Шкала вр.» и может быть перемещён вправо клавишей «Tab» и обратно сочетанием клавиш «Shift»+«Tab» или установлен в нужное поле ввода курсором мыши.

В соответствующие колонки даты можно вводить как в обычном формате с указанием месяца и номера суток внутри месяца, так и в упрощённом формате – без указания месяца, используя лишь номер года и номер суток внутри года. В программе используется компьютерный вариант отображения дат. Слева направо: для обычных дат – номер года (yyyy), номер (для ВК – название) месяца (mm, мес.), номер суток месяца (dd); для упрощённых дат – номер года (yyyy), номер суток года (ddd). Такой порядок принят для того, чтобы исключить ввод некорректного номера суток. Для обычных дат после ввода номера года (yyyy) и месяца (mm, мес.) программа не позволит ввести 31-й номер суток месяца, состоящего из 30 суток, или 29 февраля в простом году. Для упрощённых дат после ввода номера года (yyyy) – не позволит ввести нулевой номер суток в простом году. При попытке изменить порядок ввода, программа выведет предупреждение и потребует его соблюдения.

В поля «t, сут», «yyyy», «ddd», «mm», «dd» могут быть введены только числовые значения. Максимальное количество вводимых знаков, первый из которых может быть «минус», для значений шкалы времени составляет восемь, а для номеров года (yyyy) всех календарей, кроме ЮК (ист.), – пять. Для ЮК (ист.) количество знаков номера года ограничено значением четыре, поскольку роль знака «минус» для него выполняет обозначение «до н. э.». Для УпрВК и ВК номера годов ограничены только положительными значениями. Номера месяцев, отображаемых числами (mm), ограничены значениями от 1 до 12 включительно. Номера суток (ddd) упрощённых дат в зависимости от типа введённого года (простой или високосный) ограничены значениями от 0 или от 1 до 365 включительно. Номера суток (dd) обычных дат – значениями от 1 до 28, 29, 30, 31 в зависимости от введённых месяца и года. При попытке ввести значения, выходящие за указанные пределы, программа выведет сообщение об ошибке и фокус будет возвращён в поле, в котором эта ошибка была совершена. Обозначения «н. э.» или «до н. э.» для дат по ЮК (ист.) и название месяца («мес.») для дат по ВК выбираются курсором из выпадающих списков. После полного завершения ввода даты по ЮК (ист.) изменение обозначений «н. э.» или «до н. э.» становится недоступным. Чтобы это изменение вновь стало доступным, необходимо нажать кнопку «Отменить ввод». Нажатие этой кнопки удаляет все введённые значения из всех полей и возвращает таблицу ввода дат в исходное состояние.

Имеются ещё два ограничения по значениям шкалы времени: минимальное – отрицательное значение -2011918, соответствующее первым суткам первого года по ВК, и максимальное – положительное значение 3652061, соответствующее последним суткам 9999 г. по ГК. При попытке выхода за эти пределы по шкале времени или по датам, приводящим к такому выходу, программа выведет предупреждение и таблица ввода вернётся в исходное состояние. С учётом всех ограничений, наиболее ранние и наиболее поздние значения вводимых дат, которые программа примет к исполнению, по всем календарям приведены в верхней и нижней строках таблицы (см. ниже).

При работе в IE ввод значения в каждое поле следует завершать нажатием клавиши «Tab», в Chrome, Opera, Firefox – клавиши «Enter». Незначащие (предваряющие) нули вводить не требуется, при завершении ввода каждого значения программа сформирует их автоматически. После завершения ввода корректного значения шкалы времени или исходной даты, фокус устанавливается на кнопку «Рассчитать», и расчёт может быть запущен клавишей «Enter» или нажатием на эту кнопку курсором. После расчёта хотя бы одного значения, ниже таблицы ввода появляется таблица «Результаты», содержащая строку с результатами расчёта по всем календарям, включённым для отображения, а программа становится готова к вводу нового значения для расчёта. Результат каждого последующего расчёта располагается выше предшествующего и отделяется от него пустой строкой, смещая все предшествующие результаты на две строки вниз. После появления хотя бы одного рассчитанного результата становится доступной опция «Рассчитать диапазон». Включение этой опции позволяет рассчитать диапазон дат, начиная от последней (самой верхней) ранее рассчитанной даты до даты, введённой непосредственно перед включением этой опции. При этом вводимая дата должна быть более поздней, чем рассчитанная ранее. Результаты расчёта диапазона отображаются единым массивом без пустых строк. Направление оси времени внутри такого массива – снизу вверх: нижняя строка – дата начала диапазона (рассчитанная ранее), верхняя строка – дата завершения диапазона (введённая непосредственно перед включением опции). Последняя (самая поздняя) дата диапазона может быть использована для продолжения расчёта диапазона в будущее.

Результаты расчётов выводятся шрифтами, форматы которых отображены в таблице. Значения шкалы времени на всём протяжении – обычным прямым. Обычные даты, входящие в диапазон фактического действия соответствующего календаря, – полужирным прямым. Обычные даты, не входящие в диапазон фактического действия соответствующего календаря, – осветлённым прямым кроме пролептических частей ЮК (аст.) и ЮК (ист.). Обычные даты пролептических частей ЮК (аст.) и ЮК (ист.) – обычным прямым. Упрощённые даты в пределах диапазона фактического действия соответствующего календаря и в пролептической части ЮК – обычным курсивом, вне этих пределов – осветлённым курсивом. Дни недели – обычным прямым.

При отрицательных значениях t шкалы времени упрощённые даты ЮК (УпрЮК) строятся на основе астрономического варианта ЮК, т. е. годы дат УпрЮК имеют отрицательные номера, совпадающие с номерами годов ЮК (аст.), а обозначения «н. э.» и «до н. э.» не применяются. Упрощённые даты ГК (УпрГК) построены аналогично.

Таблица
  Шкала
времени
УпрГК
yyyy . ddd
ГК
yyyy . mm . dd
УпрЮК
yyyy . ddd
ЮК (аст.)
yyyy . mm . dd
ЮК (ист.)
(эра) yyyy . mm . dd
УпрВК
yyyy . ddd
ВК
yyyy month dd
День
нед.
 
  3652061 9999 . 365 9999 . 12 . 31 9999 . 292 9999 . 10 . 19 (н.э.) 9999 . 10 . 19 15508 . 048 15508 окт. 19 Пт.  
 
Обычный
прямой

Обычный
курсив


Полужирный
прямой


Осветлённый
курсив


Осветлённый
прямой


Осветлённый
прямой


Осветлённый
курсив


Осветлённый
прямой


Обычный
прямой
 
   
   
   
   
   
   
   
  1918 . 032 1918 . 02 . 01 (н.э.) 1918 . 02 . 01  
  1918 . 031 1918 . 01 . 31 (н.э.) 1918 . 01 . 31  
 
Обычный
курсив


Полужирный
прямой


Полужирный
прямой

 
  7208 . 122 7208 янв. 01  
  7208 . 121 7208 дек. 31  
  1582 . 288 1582 . 10 . 15
Обычный
курсив


Полужирный
прямой

 
  1582 . 287 1582 . 10 . 14  
 
Осветлённый
курсив


Осветлённый
прямой

 
   
  0526 . 01 . 01 (н.э.) 0526 . 01 . 01  
  0525 . 12 . 31 (н.э.) 0525 . 12 . 31  
 
Обычный
прямой

Обычный
прямой
 
  5834 . 001 5834 сен. 01  
  5833 . 365 5833 авг. 31  
 
Осветлённый
курсив


Осветлённый
прямой

 
   
   
   
  -2011918 -5508 . 200 -5508 . 07 . 19 -5508 . 244 -5508 . 09 . 01 (до н.э.) 5509 . 09 . 01 0001 . 001 0001 сен. 01 Сб.  
 

Для удаления всех результатов расчётов из рабочего окна его необходимо закрыть, вернуться на страницу (вкладку) запуска программы, перезагрузить её («refresh», «F5») и перезапустить программу кнопкой «Запуск программы».

Поскольку программа работает на машине пользователя, время расчёта и время вывода результатов на экран могут существенно различаться в зависимости от браузера и мощности машины. В любом случае, время вывода результатов в сотни раз больше, чем время расчёта. При расчёте диапазона значений из 5 тыс. сут (~14 годов) время расчёта во всех браузерах составило доли секунды, время вывода на экран в IE ~75 сек, в Chrome и Opera ~ 20 сек, в Firefox 4,5 сек. В диапазоне из 20 тыс. сут (~55 годов) в IE расчёт занял ~1,8 сек, вывод на экран ~5 мин, в Chrome и Opera расчёт занял ~0,4 сек, вывод на экран ~6 мин. При попытках в этих трёх браузерах увеличить диапазон расчёта далее, за разумное время дождаться завершения операций не удалось. Значительно лучшие результаты показал Firefox: расчёт диапазона из 80 тыс. сут (~220 годов) занял ~0,25 сек, вывод на экран ~2 мин. При желании пользователя оценить эти параметры на своей машине, можно задействовать опцию «Отобразить время расчёта и вывода». Следует иметь в виду, что после каждого акта расчёта (даже единичного значения) или после нажатия кнопки «Повторить вывод» рабочее окно полностью перезагружается. Поэтому время вывода результатов на экран после расчёта или перезагрузки – это время вывода всей хранящейся в оперативной памяти информации, включая результаты, рассчитанные ранее. В зависимости от браузера и настроек при расчётах больших диапазонов могут появляться системные оповещения с предложением прервать или продолжить работу сценария. При продолжении, время ожидания реакции пользователя с неизбежностью добавляется к значению времени вывода результатов на экран.

Рабочее окно программы – окно виртуальное. Оно строится в оперативной памяти методами «JavaScript» и не связано с конкретным файлом. При использовании таких окон, в браузерах предусмотрены разные ограничения для обеспечения безопасности пользователя. В частности, ограничивается возможность создания файлов для сохранения содержания таких окон на жёсткий диск. В связи с этим, имеются неудобства при необходимости сохранить результаты расчётов. Из перечисленных браузеров сохранить содержимое рабочего окна с результатами расчётов в файл обычным путём (через меню «Файл») позволил только Firefox. При работе в IE эту возможность обеспечивает специальная кнопка «Сохранить (IE)», расположенная под таблицей ввода данных. Но в Chrome и Opera оба эти варианта не работают. В этих браузерах результаты расчёта проще всего сохранить выделив («Ctrl»+«A») и скопировав («Ctrl»+«C») всё содержимое рабочего окна в буфер обмена, а затем вставить это содержимое в пустую страницу MS Word, удалив затем таблицу ввода данных, которая на странице MS Word отображается некорректно. Таблица полученных результатов отображается в MS Word вполне корректно и может быть сохранена в файл обычным путём.

Поскольку автор – не программист, то вряд ли эта программа представляет собой «шедевр программного искусства» и может изменяться, совершенствоваться и распространяться любым желающим под его ответственность. Полный текст программы представлен в файле prog1.txt. Запуск на выполнение загруженной в оперативную память программы осуществляется вызовом функции «Page()», которая создаёт рабочее окно, что и происходит при нажатии кнопки «Запуск программы». Дальнейшее управление работой программы производится из рабочего окна.

 

Яндекс.Метрика