Пусть первый рабочий день был 1 января в прошлом году, а текущий день — 15 февраля этого года. Формула рассчитает, что прошло "1 год 1 месяц 14 дней" и покажет это. Формула не делит дни на рабочие и выходные. Она просто считает прошедшие дни.
Данная формула собирает большой перечень переменных для расчета. За основу берется дата в UNIX формате в переменной table.current.firstWorkDay
.
total
— вычитает исходную дату из сегодняшней даты
y
, m
, — считают количество лет и месяцев
d
— отрабатывает условие, что если кол-во дней меньше одного, рассчитает дату без учета кол-ва лет, а если больше одного, то с учетом кол-ва лет
cury
, curm
, curd
— округление в меньшую сторону переменных, указанных выше.
if(table.current.firstWorkDay == null, "Не указан первый рабочий день",
let({
first: table.current.firstWorkDay,
firstdate: toDate(first),
today: toNumber(now()),
total: today - first,
y: total / 31556926000,
m: (total / 2629743000) - (floor(y) * 12),
d: if((total / 86400000 / 365.24) < 1, total / 86400000, (total / 86400000 / 365.24)),
cury: floor(y),
curm: floor(m),
curd: floor(d),
ywords: ['год', 'года', 'лет'],
mwords: ['месяц', 'месяца', 'месяцев'],
dwords: ['день', 'дня', 'дней'],
years: cury & ' ' & ywords[if(
cury % 100 > 4 and cury % 100 < 20,
2, [2, 0, 1, 1, 1, 2][if(cury % 10 > 5, 5, cury % 10)]
)],
month: curm & ' ' & mwords[if(
curm % 100 > 4 and curm % 100 < 20,
2, [2, 0, 1, 1, 1, 2][if(curm % 10 > 5, 5, curm % 10)]
)],
days: curd & ' ' & dwords[if(
curd % 100 > 4 and curd % 100 < 20,
2, [2, 0, 1, 1, 1, 2][if(curd % 10 > 5, 5, curd % 10)]
)],
},
if(cury <= 0, "", years)
& " " &
if(curm <= 0, "", month)
& " " &
if(curd <= 0, "меньше одного дня", days)
)
)
Где "table.current.firstWorkDay" — это ваша дата в UNIX формате из БД
Этот код на Creatium выполняет следующие действия:
firstWorkDay
таблицы table.current
не указана дата, скрипт вернет строку "Не указан первый рабочий день".firstWorkDay
в формат даты, получает текущую дату и время в числовом формате и вычитает из нее дату firstWorkDay
. Полученное число total
представляет собой разницу в миллисекундах между текущим моментом и firstWorkDay
.y
), месяцы (m
) и дни (d
). Вычисления основаны на среднем количестве миллисекунд в году, месяце и дне. cury
), месяцев (curm
) и дней (curd
).Таким образом, этот скрипт используется для определения количества времени, прошедшего с даты firstWorkDay
до текущего момента, и вывода этого времени в удобочитаемом формате.
Если данный скрипт насчитает 754 дня (на самом деле он ведёт рассчёт в миллисекундах), то его конечный ответ будет выглядеть следующим образом: 2 года 1 месяц 4 дня
.
Дмитрий Соловей — @solovey_nchub
Сайт: https://batvai.by/useful
Простой текст
Работает на Creatium