Notion и BuildIn позволяют использовать формулы для вычисления различных временных интервалов. В этой статье разберем, как определить, сколько процентов года, месяца, недели или дня уже прошло, а также как рассчитать процент оставшейся жизни.
Прогресс времени с помощью функции dateBetween
Основная функция, которая поможет нам в расчетах, — это dateBetween
. Она позволяет вычислять разницу между двумя датами в заданных единицах измерения (дни, месяцы, годы и т. д.).
Синтаксис:
dateBetween(ДАТА_1, ДАТА_2, "единица измерения"
Где:
• ДАТА_1 — начальная дата;
• ДАТА_2 — конечная дата;
• «единица измерения» — «days», «months», «years» и т. д.
Как вычислить прогресс текущего года?
Чтобы узнать, сколько процентов текущего года уже прошло, используем следующую формулу:
"●".style("green").repeat(
floor(
toNumber(formatDate(now(), "DDD")) /
((year(now()) / 400 % 1 == 0 or
year(now()) / 4 % 1 == 0 and
year(now()) / 100 % 1 != 0) ? 366 : 365)
* 10
)
) +
"○".repeat(
ceil(
10 - toNumber(formatDate(now(), "DDD")) /
((year(now()) / 400 % 1 == 0 or
year(now()) / 4 % 1 == 0 and
year(now()) / 100 % 1 != 0) ? 366 : 365)
* 10
)
) +
" Год: " +
format(
round(
toNumber(formatDate(now(), "DDD")) /
((year(now()) / 400 % 1 == 0 or
year(now()) / 4 % 1 == 0 and
year(now()) / 100 % 1 != 0) ? 366 : 365)
* 100
)
) + "%"
Эта формула в Notion рассчитывает, сколько процентов текущего года уже прошло, и визуализирует это с помощью 10 индикаторов (● – прошедшая часть, ○ – оставшаяся).
У нас получится вот такой прогресс-бар:

Как вычислить прогресс текущего месяца?
Воспользуемся формулой:
format(
repeat("●".style("green"), floor(
(toNumber(formatDate(now(), "D")) /
if(month(now()) == 2,
if(year(now()) % 400 == 0 or (year(now()) % 4 == 0 and year(now()) % 100 != 0), 29, 28),
if(test(format(month(now())), "4|6|9|11"), 30, 31)
) * 10)
))
) +
format(
repeat("○", ceil(
10 - (toNumber(formatDate(now(), "D")) /
if(month(now()) == 2,
if(year(now()) % 400 == 0 or (year(now()) % 4 == 0 and year(now()) % 100 != 0), 29, 28),
if(test(format(month(now())), "4|6|9|11"), 30, 31)
) * 10)
))
) +
" Месяц: " +
format(
round(
(toNumber(formatDate(now(), "D")) /
if(month(now()) == 2,
if(year(now()) % 400 == 0 or (year(now()) % 4 == 0 and year(now()) % 100 != 0), 29, 28),
if(test(format(month(now())), "4|6|9|11"), 30, 31)
) * 100)
)
) + "%"
Результатом будет такой прогресс:

Как вычислить прогресс текущей недели?
format(
replaceAll(
substring("xxxxxxxxxx", 0, floor(
(round(((day(now()) % 7 + 1) / 7) * 100) / 100) * 10
)), "x", "●")
).style("green") +
replaceAll(
substring("xxxxxxxxxx", 0, ceil(
10 - (round(((day(now()) % 7 + 1) / 7) * 100) / 100) * 10
)), "x", "○"
) + " Неделя: " +
format(
round((round(((day(now()) % 7 + 1) / 7) * 100) / 100) * 100)
) + "%"
Как вычислить прогресс текущего дня?
lets(
hp, now().hour() / 24 * 10,
"●".style("green").repeat(hp.floor())
+ "○".style("default").repeat(10 - hp.floor())
+ " День: " + hp * 10 + "%"
)
Как вычислить оставшийся процент жизни?
Если человек родился 4 июля 1998 года и планирует дожить до 99 лет, то можно рассчитать процент жизни, который уже прошел:
- Сделаем свойство «Дата» и называем «Дата рождения»
- Создаем свойство «Formula» и называем его «Возраст»
- Вставляем в Возраст эту формулу:
dateBetween(now(), prop("Дата рождения"), "years")
Формула подсчитает ваш полный возраст.
- Далее создаем свойство «Number» и называем «В планах дожить до» и вписываем до скольки лет вы собираетесь прожить.
- Создаем свойство «Formula» и называем его «Прогресс жизни»
Вставляем следующую формулу:
"●".style("green").repeat(
floor(
dateBetween(now(), Дата рождения, "days") /
dateBetween(
dateAdd(Дата рождения, В планах дожить до, "years"),
Дата рождения, "days"
) * 10
)
) +
"○".repeat(
ceil(
10 - dateBetween(now(), Дата рождения, "days") /
dateBetween(
dateAdd(Дата рождения, В планах дожить до, "years"),
Дата рождения, "days"
) * 10
)
) +
" Жизнь: " +
format(
floor(
dateBetween(now(), Дата рождения, "days") /
dateBetween(
dateAdd(Дата рождения, В планах дожить до, "years"),
Дата рождения, "days"
) * 100
)
) + "%"
Теперь вы точно знаете, сколько процентов вашей жизни осталось! У вас должно получится вот так:
