Numărul inversă PHP cu secunde. Timerul de numărătoare inversă construit pe PHP și JQuery? Pregătiți-vă ceasul de afișat
Se întâmplă că aveți nevoie de ceva timer de numărătoare inversăPe internet există multe soluții, totuși, sunt fie foarte greoaie, fie depind de alte biblioteci. Astăzi ne vom uita cum se face un cronometru de numărătoare inversă pe JavaScript în 18 linii de cod.
Plan
- Calculați timpul rămas
Setați data de încheiere corectă
În primul rând, trebuie să setați data de încheiere a dreptului. Acesta va fi un șir în oricare dintre formatele care înțeleg Data.parse () metodă. De exemplu:
VAR LEDEL \u003d "2015-12-31";
Format scurt.
VAR DEDEMEN \u003d "12/31/2015";
Sau format lung
VAR DIEADLINE \u003d "31 decembrie 2015";
Fiecare dintre aceste formate vă permite să setați timpul exact (în ore, minute, secunde) și fusul orar. De exemplu:
VAR DEDEMEN \u003d "31 decembrie 2015 23:59:59 GMT + 02: 00";
Calculați timpul rămas
Funcția GetTimeMaining (Endtime) (
var t \u003d data.parse (endtime) - data.parse (noua dată ());
var secunde \u003d matematică.floor (((t / 1000)% 60);
VAR Minute \u003d Math.Floor ((t / 1000/60)% 60);
VAR ORE \u003d MATH.Floor (((t / (1000 * 60 * 60))% 24);
VAR ZILE \u003d MATH.FLOOR (T / (1000 * 60 * 60 * 24));
Întoarcere (
"Total": t,
"Zilele": zile,
"Ore": ore,
"Minute": minute,
"Secunde": secunde
};
}
Pentru a începe cu, creăm o variabilă t.pentru a păstra timpul rămas. Data.parse () Metodă încorporată în javaScript. Și vă permite să convertiți un șir cu timp la o valoare în milisecunde. Acest lucru ne va permite să citiți același timp de la celălalt și să obținem diferența dintre ele.
Var t \u003d data.parse (endtime) - data.parse (noua dată ());
Puneți o dată pentru un format convenabil.
Acum vrem să traducem milisecunde în zile, ore, minute și secunde. Să folosim secunde ca exemplu:
Var secunde \u003d matematică.floor (((t / 1000)% 60);
Ne vom ocupa de ceea ce se întâmplă aici.
- Împărțăm milisecundele pentru 1000 pentru a le traduce în câteva secunde
- Împărțim numărul total de secunde la 60 și salvați reziduul - nu aveți nevoie de toate secundele, numai cele care au rămas după momentul calculate
- Rotund până la cea mai apropiată valoare întregă, pentru că aveți nevoie de secunde complete și nu fracțiunile lor
Repetați această logică pentru a converti milisecunde pe minut, ore și zile.
Datele cronometrului de ieșire ca obiect reutilizabil
Când orele, momentele și secundele sunt gata, trebuie să le reamintim ca un obiect reutilizabil.
Întoarcere (
"Total": t,
"Zilele": zile,
"Ore": ore,
"Minute": minute,
"Secunde": secunde
};
Acest obiect vă permite să apelați caracteristica dvs. și să primiți oricare dintre valorile calculate. Iată un exemplu, deoarece puteți obține momentele rămase:
GetTIMEREMAINGING (Termen limită). Minute
Convenabil, nu?
Afișați ceasul de pe pagină și opriți-le când ajung la zero
Acum avem o caracteristică care ne întoarce la celelalte zile, ore, minute și secunde. Ne putem construi cronometrul. În primul rând, creați următoarele hTML. Structura orelor:
Apoi scrieți o funcție care va afișa date în interiorul nostru div "A.:
Funcția inițială (ID, Endtime) (
Var Clock \u003d document.gelementbyid (ID);
var timeInterval \u003d setInterval (funcția () (
" +
"Ore:" + t.hours + "
" +
"Minute:" + t.minute + "
" +
"Secunde:" + t.seconds;
}
},1000);
}
Această caracteristică are doi parametri: iD. Elementul care va conține ceasul nostru și timpul final al contorului. În interiorul funcției vom declara o variabilă cEAS. și o vom folosi pentru a păstra legătura cu blocul nostru cu un ceas, așa că nu trebuie să cerem Dom..
- Calculați timpul rămas
- Retrage timpul rămas în noi div
- Dacă timpul rămas \u003d 0, opriți ceasul
Singurul lucru lăsat să înceapă ceasul după cum urmează:
InitializeClock ("Clockiv", termen limită);
Felicitări! Acum ai timpul de numărare simplă Total în 18 linii JavaScript cod.
Pregătiți-vă ceasul de afișat
Până la stilizare, trebuie să îmbunătățim unele lucruri de îmbunătățire.
- Îndepărtați întârzierea inițială la cronometrul afișat imediat
- Faceți un script de ceas mai eficient, astfel încât să nu trebuie să reconstruiți continuu toate orele
- Adăugați zerouri la Will
Eliminăm întârzierea inițială
În ceasul pe care îl folosim setInterval.Pentru a actualiza afișajul în fiecare secundă. Cel mai adesea este normal, în plus față de început, unde este prezent întârzierea 1C. Pentru a remedia, trebuie să actualizăm ceasul o dată înainte setInterval. Începe.
Pentru a face acest lucru, haideți să mutăm funcția anonimă pe care o transmitem setInterval.(cel care actualizează ceasul la fiecare secundă) în propria funcție separată pe care o numim updateClock.. Apelați această caracteristică o dată setInterval. Și apoi o sunați din nou înăuntru setInterval.. Astfel, ceasul va fi afișat fără întârziere.
În tine javaScript. Inlocuieste-l:
Var timeInterval \u003d setInterval (funcția () (...), 1000);
Funcție UpdateClock () (
var t \u003d gettimeremaining (endime);
Ceas.innerhtml \u003d "Zile:" + T.Days + "
" +
"Ore:" + t.hours + "
" +
"Minute:" + t.minute + "
" +
"Secunde:" + t.seconds;
dacă (T.Total ClearInterval (TimeInterval);
}
}
Update Clock (); // executați funcția o dată pentru a evita întârzierea
VAR TimeInterval \u003d SetInterval (UpdateClock, 1000);
Făcând scriptul mai eficient
Pentru a face un script mai eficient, trebuie să actualizăm toate orele, ci doar numere. Pentru a face acest lucru, plasați fiecare număr în etichetă span. Și vom actualiza doar acest conținut.
Aici hTML.:
Zile:
Ore:
Minute:
Secunde:
VAR Daysspan \u003d Ceas.QuerySelector ("Zilele");
VAR WORREPAN \u003d Ceas.QuerySelector ("Hosts");
VAR MinutesSpan \u003d Ceas.QuerySelector ("minute");
VAR Secondsspan \u003d Ceas.QuerySelector ("secunde");
Funcție UpdateClock () (
var t \u003d gettimeremaining (endime);
Dayssspan.innerhtml \u003d t.Days;
Orespan.innerhtml \u003d t.hours;
minutesspan.innerhtml \u003d t.minutes;
secretspan.innerhtml \u003d t.seconds;
...
}
Adăugați zerouri de conducere
Dacă aveți nevoie de zerouri, puteți înlocui codul pentru acest tip:
Secretspan.innerhtml \u003d t.seconds;
Pe aceasta:
Secretspan.innerhtml \u003d ("0" + t.seconds) .Slice (-2);
Concluzie
Ne-am uitat la cum se face un cronometru simplu de numărătoare în JavaScript. Tot ce ați lăsat este să adăugați stiluri. Multumesc pentru atentie!
O zi bună pentru toată lumea.
Să încercăm să trecem cronometrul pe PHP
Probabil o mulțime care se întreba de întrebări:
1. Cât timp îmi ia scenariul.
2. Cât de mult este pagina (puteți observa despre mai multe site-uri).Și așa, să mergem.
Să creăm cronometrul pe OOP, adică în Ideul de clasă și să dau numele cronometrului:
CLASER TIMER ()
Și să creăm imediat un designer de clasă, astfel încât să putem numi datele temporizatorului (acest lucru este în mare parte necesar pentru diferențiale) și, de asemenea, trebuie să creați o variabilă în care am reușit să stocăm rezultatele cronometrului.
Iată codul care va funcționa:$ TIMETIMER \u003d matrice ();
Timer de clasă (
Private $ id;
$ acest -\u003e id \u003d $ id;
}
}Și să creăm o funcție imediat pentru a începe cronometrul, Outcasts și tragerea valorii curente:
Clastimer (
Private $ id;/ * Funcția de pornire a temporizatorului * /
Funcția Start () ()
Global $ Timetimer; // astfel încât a fost posibil să se facă referire la variabila globală
$ mtime \u003d microtime (); // aflați ora curentă în câteva secunde și milisecunde
$ MTIME \u003d $ MTIME + $ MTIME;
$ TIMETIMER [$ Acest -\u003e ID] ["Start"] \u003d $ Mtime; // Aduceți rezultatul la variabila globală
}Funcția STOP () () ()
Global $ Timestemer;
$ mtime \u003d microtime ();
$ Mtime \u003d explodează ("", $ mtime);
$ MTIME \u003d $ MTIME + $ MTIME;
$ TIMETIMER [$ Acest -\u003e ID] ["STOP"] \u003d $ MTIME;
$ TIMETIMER [$ acest -\u003e id] ["rezultat"] \u003d $ MTIME - $ TIMETIMER [$ Acest -\u003e ID] ["Start"];
}Funcția obține ($ rand \u003d 5) (
Global $ Timestemer;
dacă ($ TIMETIMER [$ acest -\u003e id] ["rezultat"] return $ timiimer [$ acest -\u003e id] ["rezultat"];
$ mtime \u003d microtime ();
$ Mtime \u003d explodează ("", $ mtime);
$ MTIME \u003d $ MTIME + $ MTIME;
Întoarcere ($ MTIME - $ TIMETIMER [$ Acest -\u003e ID] ["Start"], $ rand);Funcție __construct ($ id \u003d "") (
dacă ($ id) (trigger_error ("intrare greșită parametr", e_user_warning);)
dacă ($ TIMETIMER [$ id]) (trigger_error ("nu poate init cronometrul", e_user_warning);)
$ acest -\u003e id \u003d $ id;
}
}Ei bine, cred că în clasa însăși, indiferent de problemele. Rămâne doar pentru a inițializa cronometrul:
$ TIMER \u003d Timer nou ("Test"); // Creați un cronometru cu numele "Testul"
$ TIMER -\u003e Start (); // Rulați cronometrul
$ Timer -\u003e oprire (); // opriți cronometrulCa rezultat al acestui cod, vom obține o valoare foarte mică!
Să încercăm să încărcați cumva sistemul. Puteți utiliza ciclul:$ Timer \u003d cronometru nou ("test");
$ TIMER -\u003e Start ();
pentru ($ i \u003d 0; $ i< 500000; $i++){//запустим цыкл на пол милиона раз
Dacă (IS_INT ($ I / 100000)) (// Dacă valoarea curentă este de 100.000 sau 200.000 sau 300.000 .... retrageți rezultatul curent, dar nu opriți cronometrul!
ECHO $ \u200b\u200bTIMER -\u003e Obțineți (). "
";
}
}
$ Cronometru -\u003e oprire ();
Print_r ($ TIMETIMER); // Afișează cronometrul nostruUtilizarea acestei clase poate crea o multitudine de cronometre care nu vor încărca sistemul.
Acesta nu este un script de cronometru mare. Clasa poate fi, de asemenea, întrebătă puțin și se înființează pentru sine.
Dacă este anunțată o acțiune pe site, site-ul câștigă foarte mult dacă există un bloc pe el, arătând cât timp rămâne înainte de a începe - contorul de numărătoare inversă. De asemenea, contorul de numărătoare inversă poate arăta cât timp rămâne până la sfârșitul acțiunii, dacă acțiunea este deja valabilă.
Vom analiza exemplul atunci când concursurile sunt organizate pe site cu participarea vizitatorilor la fața locului. Fiecare competiție din administrator a stabilit data de încheiere. Contorul de numărătoare inversă ar trebui să arate câte zile, ore și minute rămase până la sfârșit.
1. Mai întâi avem grijă de declinarea corectă a cuvintelor în fața numerelor. De exemplu, dacă timpul rămas este de 45 de zile etc., apoi contorul de pe site și ar trebui să emită element "zile", și nu "zi" sau "zi". Și dacă au rămas 21 de zile etc., atunci trebuie să scrieți "Ziua". La fel cu ceasul și minutele. Pentru aceasta, funcția de utilizator corectă este responsabilă. Codul său este prezentat mai jos.
Cod PHP.
$ mod \u003d numărul de dolari% 100;
$ Sufix_key \u003d ($ mod\u003e 7 & $ mod
returnați $ sufix [$ sufix_key];
2. În continuare, trebuie să obținem data de încheiere a concursului afișat pe pagina curentă. Pentru a face acest lucru, scrieți o cerere la baza de date, unde End_ este data în formatul numărului și ora. Atribuiți valoarea variabilei $ real_end. Apoi primim data actuală și funcția de timp PHP.
Cod PHP.
3. Și, de fapt, contorul de numărătoare inversă în sine. Folosim de două ori funcția PHP Strtotime, ceea ce convertește o prezentare a textului data în limba engleză la eticheta de timp UNIX pentru data curentă și data de încheiere a concursului. Avem diferența în câteva secunde între data de încheiere și data curentă. Apoi, folosind funcția PHP Podea, returnând cel mai apropiat întreg mai mic, calculați zilele, orele și minutele rămase. Calculele se bazează pe faptul că în minut de 60 de secunde, la o oră și 3600 de secunde, la 1 fund 86400 secunde.
Cod PHP.
$ Acum_date \u003d strtotime ($ dat);
4. Acum folosim funcția de utilizator corectă pentru a refuza cuvintele în fața numerelor.
Cod PHP.
printf ("
% s% s% s% s% s% s
Înainte de închiderea competiției5. În cele din urmă, codul bloc complet care implementează contorul de numărătoare inversă. Ca și în cazul concursurilor, acesta poate face, de asemenea, o inversă pentru acțiuni pe anumite bunuri pe un site de directoare sau de orice altă numărătoare inversă a timpului rămas în orice "oră oră".
Cod PHP.
// funcția de scădere a cuvintelor înainte de numere
funcția corectă (numărul $, $ sufix) (
$ Taste \u003d matrice (2, 0, 1, 1, 1, 2);
$ mod \u003d numărul de dolari% 100;
$ Sufix_key \u003d ($ mod\u003e 7 & $ mod
returnați $ sufix [$ sufix_key];
$ rezultat \u003d mysql_query ("Selectați End_ de la concursuri în care CID \u003d" $ CID "") sau Die (MySQL_ERROR ());
$ myrowt \u003d mysql_fetch_array ($ rezultat);
$ real_end \u003d $ myrowt;
$ Dt \u003d data ("y-m-d, h: i: s");
// Calculul zilelor rămase, ore și minute
$ Acum_date \u003d strtotime ($ dat);
$ Future_Date \u003d Strottime ($ real_end);
$ diferență_days \u003d $ FILY_Date - $ acum_date;
$ Zile \u003d podea ($ diferență_days / 86400);
$ diferență_hours \u003d $ diferență_days% 86400;
$ Ore \u003d podea ($ diferență_hours / 3600);
$ diferență_min \u003d $ diferență_hours% 3600;
$ min \u003d podea ($ diferență_min / 60);
$ array1 \u003d matrice ("zi", "zi", "zile");
$ Word1 \u003d Correctform ($ zile, $ array1);
$ array2 \u003d matrice ("oră", "oră", "ore");
$ Word2 \u003d corectform ($ ore, $ array2);
$ array3 \u003d matrice ("minut", "minute", "minute");
$ Word3 \u003d Correctform ($ min, $ array3);
printf ("
% s% s% s% s% s% s
Înainte de închiderea competițieiDupă ce ați petrecut ultimele 45 de minute pe soluția soluției, nu pot găsi o ușoară soluție pentru crearea unui cronometru de numărătoare inversă folosind PHP și JQuery. Majoritatea scripturilor deja construite pe care le-am găsit se bazează exclusiv pe jQuery, care necesită tone de cod și mai mulți parametri decât ar trebui, plus, adaptabilitatea este destul de dificilă.
Aceasta extrem Ușor de folosit.
Tot ce trebuie să faceți este
$ ("# Timer"). Countdown ((până: ""// schimbați acest lucru, evident));
Ei bine, știu că identificatorul nu este o variabilă, dar nu utilizează acest lucru ca un identificator. Cauzează oamenii să urce.
În caz contrar, nu reporniți valoarea, setați valoarea lui JS în PHP și apoi conta.
/ / Plasați acest lucru în
Deasupra codului de mai jos Echo "Var T \u003d". Timp (). ";"; Echo "var ft \u003d". / * Ultimul timp aici * /. ";";// Aceasta este o funcție de ajutor. Funcție lpad (intrare, len, padstr) (dacă (padstr) Padstr \u003d ""; // aceasta este valoarea normală implicită pentru pad. Var ret \u003d șir (intrare); var dlen \u003d ret.length - len; dacă (dlen \u003e 0) return ret; pentru (var i \u003d 0; i< dlen; i++) ret = padstr + ret; return ret; } $(document).ready(function name() { $("#timer").load(function() { // I changed the id $timer = $("timer"); // might as well cache it. // interval, not timeout. interval repeats var intval = setInterval(function(){ t += 500; // decrease the difference in time if(t >\u003d Ft) (t \u003d ft; // prevenirea timpului negativ. ClearInterval (intval) // curățare atunci când este terminat.) VAR DT \u003d Noua dată (FT - T); $ Timer.innerhtHTML \u003d DT.Gethours () + ":" + // pad pentru a vă asigura că este întotdeauna 2 cifre lpad (dt.geminutes (), 2, "0") + ":" + lpad (dt.getSecondss (), douăzeci "; ), 500) // trepte de 0,5 secunde sunt mai precise)));
De îndată ce PHP a încărcat un anumit timp pentru utilizator, puteți explica de ce acest lucru nu este suficient pentru nevoile dvs .:
$ (funcție () ($ timediv \u003d $ ("# Acest"); cronometrul ();)); Timerul funcției () ($ timerdiv.html ((int) $ timerdiv.html () - 1); settimeout (cronometru, 1000);)
Sunteți foarte aproape de codul dvs. sursă. Iată o modificare a codului dvs. de mai jos, care funcționează așa cum este descris sau cel puțin așa cred - știu că funcționează, dar nu sunt sigur dacă corespunde cerințelor dvs., erau puțin neclar. Evident, dacă reporniți pagina, trebuie să vă bazați pe ieșirea PHP pentru a fi diferită în ordine pentru că contorul nu scade. Doar vreau să rețineți că nu sunt sigur de ce utilizați funcția. Încărcare. Această caracteristică este într-adevăr doar o coajă pentru a apela Ajax pentru a capta conținutul unei alte pagini și a le lipi în DIV selectat. Cred că căutați o funcție.html () pentru a schimba conținutul DIV selectat utilizând conținutul disponibil în DOM, împotriva interogării AJAX.
VAR TIMER; $ (Document) .rea (numele ();); Numele funcției () (// Ștergeți Cleanter Cleartimeout (Timer); // Resetați temporizatorul Timerului \u003d SetTimeout ("Nume ()", 1000); // apuca valoarea de timp curentă în DIV VAR TIME \u003d $ (" ") ) + Parseint (time_splits); // scade 1 secundă din timp total_time - \u003d 1; // rotiți timpul total înapoi în ore, minute și secunde Var ore \u003d parseint (total_time / 3600); total_time% \u003d 3600; VAR Minute Parseint (total_time / 60); var secunde \u003d total_time% 60; // set New Time Variable Var New_Time \u003d (ore< 10 ? "0" : "") + hours + (minutes < 10 ? ":0" : ":") + minutes + (seconds < 10 ? ":0" : ":") + seconds; //set html to new time $("#this").html(new_time); }
$ Dateformat \u003d "D FY - G: IA"; $ TARGETDATE \u003d $ FUTUDELATE; // Schimbați cele 25 de minute pe care doriți să le numărați inversă Data modificării în STRTOTime $ Actualdate \u003d $ Data1; $ secrediff \u003d $ țintdated - $ ACTUALDATE; $ Rămasedday \u003d podea ($ secrediff / 60/60/24); $ RămaseHour \u003d podea (($ secrediff - ($ rămasă * 60 * 60 * 24)) / 60/60); $ Remedinuteminutes \u003d podea (($ secrediff - ($ restul zilei * 60 * 60 * 24) - ($ rămasă * 60 * 60)) / 60); $ Rămaseseconds \u003d etaj (($ secrediff - ($ restul zilei * 60 * 60 * 24) - ($ Resoldhour * 60 * 60)) - ($ remedinuteminute * 60)); $ ActualDatedisplay \u003d data ($ dateformat, $ Actualdate); $ țintddatedisplay \u003d data ($ dateformat, $ țintdate); 0)){ ?>
În $ dateformat \u003d "D FY - G: IA"; $ TARGETDATE \u003d $ FUTUDELATE; // Schimbați cele 25 de minute pe care doriți să le numărați inversă Data modificării în STRTOTime $ Actualdate \u003d $ Data1; $ secrediff \u003d $ țintdated - $ ACTUALDATE; $ Rămasedday \u003d podea ($ secrediff / 60/60/24); $ RămaseHour \u003d podea (($ secrediff - ($ rămasă * 60 * 60 * 24)) / 60/60); $ Remedinuteminutes \u003d podea (($ secrediff - ($ restul zilei * 60 * 60 * 24) - ($ rămasă * 60 * 60)) / 60); $ Rămaseseconds \u003d etaj (($ secrediff - ($ restul zilei * 60 * 60 * 24) - ($ Resoldhour * 60 * 60)) - ($ remedinuteminute * 60)); $ ActualDatedisplay \u003d data ($ dateformat, $ Actualdate); $ țintddatedisplay \u003d data ($ dateformat, $ țintdate); 0)){ ?>Pentru mai multe informații, vizitați Urfusion
@Epascarello Răspundeți la o întrebare, trebuie să treceți valoarea ciclului în selector cu un identificator, de exemplu, $ ("Timer php echo $loopval; ?> ")
și, de asemenea, provoacă acest lucru