Мир «Детей Пространства»
система календарных расчетов
00000
00000
00:00:00
Not logged in

Желающие увидеть как это работает, могут скачать из timeline.ods и поиграться. см лист "марсианский календарь", для толиманского был специфический хак.

  1. В первую колонку мы будем писать даты для пересчета. Благо формат даты/времени в электронной таблице это дробное число суток от некоторой фиксированной даты (которая нас сейчас абсолютно не волнует) Начнется эта таблица где-то с 7 строки. Выше у нас будут константы из п.2

  2. В начале таблицы мы напишем ряд констант, определяющих этот календарь. В частности, продолжительность года и суток на планете in question. Год нам нужен и в секундах и в земных сутках, и в местных сутках. Начальную дату (соответствующую 0 часов 1 числа 1 месяца 1 года пишем в виде обыкновенной земной даты. Ячейкам заводим соответствующие имена, чтобы формулы были понятнее.

  3. Где-нибудь далеко справа сделаем маленькую табличку, содержащую название месяца, его продолжительность в сутках в невисокосный год, в високосный, и соответственно, число суток с начала года до начала соответствующего месяца в обоих вариантах. Присвоим колонкам этой таблицы имена МЕСЯЦЫ (колонка названий),НАЧАЛАМЕСЯЦЕВОБЫЧНЫЕ и НАЧАЛАМЕСЯЦЕВВИСОКОСНЫЕ. Колонкам "продолжительность месяцев" названия не нужны, они используются в формулах только при расчете начал месяцев, а там относительные ссылки.

  4. Во вторую колонку (b) пишем формулу =(A7-НАЧАЛЬНАЯДАТА)/ГОДВЗЕМНЫХСУТКАХ

  5. В третью колонку (c) =INT(B7) - число целых лет от начала отсчета до пересчитываегого момента

  6. В четвертую (D)- формулу, определяющую, является ли текущий год високосным по целевому календарю. Она может оказаться весьма громоздкой. Для Марса у меня получилось: =OR(MOD(C7;5)=1 ; MOD(C7;5)=4)

  7. В пятую (Е) - порядковый номер дня в году =INT((B7-C7)*ГОДВМЕСТНЫХ_СУТКАХ)+1

  8. В шестую(F) =IF(D7;MATCH(E7-1;НАЧАЛАМЕСЯЦЕВОБЫЧНЫЕ;1);MATCH(E7-1;НАЧАЛАМЕСЯЦЕВВИСОКОСНЫЕ;1)) Эта страшная формула посчитает нам порядковый номер месяца начиная с нуля.

  9. В восьмую(G) =E7-IF(D7;INDEX(НАЧАЛАМЕСЯЦЕВОБЫЧНЫЕ;F7);INDEX(НАЧАЛАМЕСЯЦЕВВИСОКОСНЫЕ;F7)) Это будет порядковый номер дня в месяце (день в году минус число дней от начала года до начала текущего месяца.

  10. В девятую (H).=INDEX(МЕСЯЦЫ;F7) - название месяца

  11. В десятую (I) =C7+1 - порядковый номер года.

Итого в колонках G-I у нас дата по местному календаю. Можно копировать формулы в колонках B-I на сколько угодно строк и вписывать в колонку A любые нужные даты.