Овладяване на изчисляването на дата и време

March 28, 2022

Формите разчитат много на полето за избор на дата – независимо дали сте:

? Оценка на времената за изпълнение на проектите

? Справяне с регистрации

? Обработка на резервации

Винаги ще дойде време, в което ще трябва да изчислите разликата между две дати. Когато ситуацията изисква това, може да се наложи да изчислите разликата до последната минута.

Тази статия ще ви насочи в процеса на това. Имайте предвид, че това ръководство никога не е предназначено да ви помогне да изградите цялата форма, а само да ви даде идея как да извършвате изчисления с 2 полета за дата.

Първо, трябва да поговорим за Epoch Време. Какво е?

Unix епохата (или Unix време или POSIX време или Unix времева марка) е броят на секундите, които са изминали от 1 януари 1970 г. (полунощ UTC/GMT), без да се броят високосните секунди (в ISO 8601: 1970-01-01T00: 00 : 00Z). Буквално казано епохата е Unix време 0 (полунощ 1/1/1970), но ‘epoch’ често се използва, като синоним на ‘Unix време’.

Определение цитирано от https://www.epochconverter.com/

Важно е да ви е удобно да работите с джаджата за формово изчисления. Ако не сте, силно ви препоръчваме да се запознаете с тази функция, като прочетете това ръководство. Продължавайки, ето таблица, която показва пълната разбивка на всяка единица време в секунди, която ще използваме при нашите изчисления:

Обърнете внимание на мерните единици за преобразуване по-горе, тъй като те ще бъдат използвани в нашите изчисления по-късно. Също така, ето някои ключови моменти за това как ще се използват джаджите за формови изчисления, защо са необходими определени формули и т.н.:

? Разликата трябва да бъде във формат Epoch Time. Защо? Защото при изваждане на две дати разликата по подразбиране е в единица дни. За да преобразуваме един ден в Epoch Time (секунди), ще го умножим по 86400.

Формула:

  (Date2-Date1)*86400

? Остатъците са важни! Вашите изчисления най-вече ще се въртят около деления, а напомнянията са от съществено значение за получаване на излишния (оставащ) брой месеци, дни, часове и минути.

За да го представим в перспектива, вземете 12345, като epoch време. Това е еквивалентно на 3 часа, 25 минути и 45 секунди.

За да получите резултата от 3 часа:

123453600=3.4291666667OR 3 R. 1545

И за да получите резултата от 25 минути:

154560=25.75ИЛИ 25 R. 45

? Джаджата не предлага начин за получаване на точния остатък от операция на разделяне. Някои от вас може да са запознати с операцията % или MOD в повечето езици за програмиране, но това не е налично в джаджата. Като алтернатива ще използваме десетичната запетая на коефициента, за да получим остатъка.

Пример:

406=6 R. 4

406=6.6666666667

И двата отговора по-горе са верни и оттам получаваме следното:

Цял номер: 6

Десетично място: 0.6666666667

Остатък: 4

За да преобразуваме десетичен знак в остатък, просто го умножаваме обратно с делителя, който е 6. И така:

0.6666666667×6=4.0000000002

След това го закръгляме до 4.

Ще използваме функцията floor (), за да получим цялото число на коефициента. Струва си да се спомене, че floor() е закръглен надолу, ceil() е закръглен нагоре, докато round() е закръглен. След това това ще бъде извадено от частното, за да се получи десетичната запетая (както е показано в примера по-горе).

Свързано ръководство: Справочник за математически функции при формови изчисления

Difference Разликата във времето за епохата трябва да бъде разделена на 2 делителя:

   – 31556926 е делител на деноминациите за година, месец и ден

   – 86400 е делителят за деноминациите за час и минута

? Скрийте полетата, които не искате да се показват във вашата форма. Обикновено не би трябвало да показвате всички джаджи за изчисления (напр. epoch разликата във времето, подсказката за остатък и т.н.).

Ето демо форма, която ще се използва в това ръководство: https://www.jotform.com/71752744778975, така че нека да започнем.

1. Добавете всички необходими полета

? Две полета за избор на дата

? Джаджи за формови изчисления

Винаги се изискват две или три джаджи за изчисления – Разликата в epoch и остатъка (за деноминациите за година/месец/ден или час/минута или и двете). Останалото е по ваша преценка и ще зависи силно от вашите изисквания.

Пример:

Ако трябва само да получите разликата в часове и минути, са ви необходими само 4 джаджи за изчисления:

Epoch Разлика

Остатък за час/минута

Часа

Минути

Ако трябва да получите разликата в месеци, дни, часове, минути, ще ви трябват 7 джаджи за изчисления:

Epoch Разлика

Остатък за месеца/деня

Остатък за час/минута

Месеци

Дни

Часа

Минути

Демо формата по-горе използва 13 джаджи за формови изчисления:

Необходими са 3 джаджи (Epoch Разлика и 2 остатъка)

5 джаджи (действителна разлика в години> месеци> дни> часове> минути)

5 джаджи (разбивка на всяка единица на време за години, месеци, дни, часове, минути)

2. Настройте полетата за избор на дата

Отворете прозореца за свойства на полето за избор на дата и отидете в раздела ВРЕМЕ. Активирайте ПОЛЕ ЗА ВРЕМЕ, като го превключите на ВКЛЮЧЕНО. Задайте МИНУТНА СТЪПКА на 1. След това задайте ФОРМАТ НА ВРЕМЕ на 24 ЧАСА.

3. Задайте джаджите за формови изчисления на САМО ЗА ЧЕТЕНЕ

Това не е задължително, но е за предпочитане да бъде активирано, за да се предотврати грешка на потребителите при изчисляване на стойността им при попълване на формата.

4. Забавната част, добавете формулата

Всички единици за време ще бъдат обхванати тук, така че просто изберете формулата, от която се нуждаете за вашата форма.

Като се има предвид:

Дата 1 = 01 януари 2017 г. в 01:05

Дата 2 = 30 юни 2036 в 20:50

Epoch = 615239100

Формула за Epoch разлика във времето:

(Date2-Date1)*86400

Умножете разликата по 86400, за да получите Epoch Времето в секунди.

Остатък (за години > месеци > дни):

(Epoch Difference / 31556926-(

floor(Epoch Difference31556926)))*31556926

Това може да изглежда сложно, но всичко, което правим тук е да получим остатъка. Epoch Времето е разделено на 31556926, защото това е броят на секундите в годината. След това изваждаме коефициента на закръгляне от първоначалния коефициент, за да получим десетичната стойност. След това го умножете обратно до 31556926, за да получите остатъка.

Формула за остатъка (за часове > минути):

(Epoch Difference / 86400-(

floor(Epoch Difference86400)))*86400

Същата идея, но този път я разделяме на 86400, за да получим оставащите часове/минути в деня.

Формула за години:

floor(Epoch Difference31556926)

Този е прав, просто разделете Epoch времето на епохата на 31556926, след което закръглете коефициента надолу.

Формула за месеци:

floor(Remainder for Y/M/D2629743)

Сега ще използваме Остатъка за Г/М/Д и ще го разделим на 2629743, за да получим броя на оставащите месеци.

Формула за дни:

floor(((Remainder for Y/M/D2629743)-Months)*30.44

Това трябва да се умножи по 30,44, за да се получи броят на оставащите дни.

Формула за часове:

floor(Remainder for HH:MM3600)

Разделете остатъка за HH: MM на 3600, броят на секундите в един час. След това закръглете резултата надолу.

Формула за минути:

round(((Remainder for HH:MM3600)-Hours)*60)

Вместо да използваме floor(), този път ще използваме round(). По-високите единици време изискват използването на floor(), за да отстъпи място на останалите (остатък) по-малки единици време. И тъй като минутите са най-малките, просто трябва да бъдат закръглени.

Следващите 5 формули не са задължителни, в случай че възникне необходимост. Ето пълната и самостоятелна разбивка на всички единици за време.

Years:

floor(Epoch Difference31556926)

Months:

floor(Epoch Difference2629743)

Days:

floor(Epoch Difference86400)

Hours:

floor(Epoch Difference3600)

Minutes:

floor(Epoch Difference60)

Да, в началото може да изглежда объркващо, но щом го разберете, особено частта за получаването на остатъка и коя единица за преобразуване трябва да се използва, всичко ще има смисъл. ?

Клонирайте демо формата, за да получите по-добро разбиране за това как работят изчисленията по-горе.

Свързано ръководство: Как да клонирате съществуваща форма от URL адрес

Коментари и предложения са добре дошли по-долу. Ако имате въпрос, публикувайте го в нашия форум за поддръжка, за да можем да ви помогнем.

Беше ли това ръководство полезно?
Свържете се с екипа за поддръжка:

Нашият екип за поддръжка на клиенти е на разположение денонощно и средното ни време за реакция е между един и два часа.
С нашия екип можете да се свържете чрез:

Форум за поддръжка: https://www.jotform.com/answers/

Свържете се с поддръжката на Jotform: https://www.jotform.com/contact/

Изпратете коментар:

Jotform Avatar
This site is protected by reCAPTCHA and the Google Privacy Policy and Terms of Service apply.

Коментар:

Podo CommentБъдете първите, които коментират.