Pagini: [1]   În jos
  Imprimă  
Ajutor Subiect: Bug Fix  (Citit de 2485 ori)
0 Utilizatori şi 1 Vizitator pe acest subiect.
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« : August 11, 2009, 12:56:33 »

Am avut putin de furca cu un bug dubios in timp ce lucram la un site si am zis ca sa pun aici bugul pentru ca sunt curios cata lume s-ar prinde care e problema (si cat de repede Smile ). Eu am pierdut cam o ora din cauza asta.

Consideram functia strtotime din php (functie care pentru o anumita data returneaza numarul de secunde trecute de la 1 Jan 1970).
Avem o perioada data prin data de inceput si data de sfarsit. De ex: 01-05-2009, 05-05-2009.
Vrem sa calculam numarul de zile din aceasta perioada si avem urmatorul cod.
Cod:
//in PHP variabilele incep cu semnul $. 
//$start -> o variabila in care avem data de inceput a perioadei
//$end -> data de sfarsit
$cnt = (strtotime($end) - strtotime($start)) / 86400;

Logica din spatele codului e destul de simpla. Vedem cate secunde au trecut de la $start pana la $end si impartim la 86400 (numarul de secunde al unei zile, 24 * 3600).
Problema ar fi ca pentru perioada 01-10-2009, 01-11-2009 acea expresie ne va da o valoare reala (impartirea nu va fi exacta). De ce?
PS: Puteti considera ca pentru o data de genul dd-mm-yyyy, strtotime returneaza numarul de secunde trecute pana la dd-mm-yyyy 00:00.
PPS: Prima persoane care raspunde corect are un + la karma de la mine Very Happy.
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #1 : August 11, 2009, 13:09:49 »

Nu sunt foarte sigur, dar se stie ca anul nu are exact 365 de zile, el are aproximativ 365 de zile si 6 ore. 2008 a fost an bisect, dar in 2009 sunt 6 ore care inca nu sunt luate in considerare de noi (anul acesta avand 365 de zile). Nu stiu cum functioneaza exact functia, dar daca tine cont de asta, cam de acolo ar putea fii impartirea cu rezultat numar real.
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #2 : August 11, 2009, 13:24:00 »

Nu are legatura cu ani bisecti. Calculeaza pur si simplu numarul de secunde. Imagineaza-ti un contor care a inceput la 1 Jan 1970 si creste in fiecare secunda cu 1. Iar functia strtotime iti afiseaza la ce valoare ajunge acel contor pentru o anumita data.
« Ultima modificare: August 11, 2009, 13:36:30 de către Savin Tiberiu » Memorat
gabitzish1
Moderatori infoarena
Nu mai tace
*****

Karma: 321
Deconectat Deconectat

Mesaje: 926



Vezi Profilul
« Răspunde #3 : August 11, 2009, 13:25:22 »

Eu cred ca inca nu ti'ai dat nici tu seama care'i bugu, si vrei sa ti'l rezolvam noi !  Dancing  Tongue
Memorat
Bogdan_C
Strain


Karma: 0
Deconectat Deconectat

Mesaje: 2



Vezi Profilul
« Răspunde #4 : August 11, 2009, 13:28:18 »

Interesant e ca, daca scrii
Cod:
$cnt = (strtotime("2 February 2009") - strtotime("1 February 2008")) / 86400; 
afiseaza un numar intreg.
Memorat
wickedman
Echipa infoarena
Nu mai tace
*****

Karma: 227
Deconectat Deconectat

Mesaje: 670



Vezi Profilul WWW
« Răspunde #5 : August 11, 2009, 13:37:07 »

E cumva de la DST?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #6 : August 11, 2009, 13:40:31 »

Da Cristi. Undeva prin octombrie (am impresia ca in ultima duminica sau ceva de genul, pentru anul 2009 e vorba de 25 octombrie) se trece la ora de iarna si ceasul se da cu o ora inapoi. Astfel apar 3600 de secunde in plus in acel calcul care creeaza acea eroare Smile.
Memorat
c_e_manu
Nu mai tace
*****

Karma: 56
Deconectat Deconectat

Mesaje: 243



Vezi Profilul
« Răspunde #7 : August 11, 2009, 13:43:59 »

Dar atunci bugul e pentru toata perioada orei de iarna, pana se trece din nou la ora de vara?
Memorat
devilkind
Echipa infoarena
Nu mai tace
*****

Karma: 284
Deconectat Deconectat

Mesaje: 1.240



Vezi Profilul
« Răspunde #8 : August 11, 2009, 13:45:39 »

Nu e valabil numai pentru perioadele care trec prin ziua in care se schimba ora.
Memorat
stef2n
Nu mai tace
*****

Karma: 218
Deconectat Deconectat

Mesaje: 641



Vezi Profilul
« Răspunde #9 : August 11, 2009, 15:58:14 »

Da Cristi. Undeva prin octombrie (am impresia ca in ultima duminica sau ceva de genul, pentru anul 2009 e vorba de 25 octombrie) se trece la ora de iarna si ceasul se da cu o ora inapoi. Astfel apar 3600 de secunde in plus in acel calcul care creeaza acea eroare Smile.
E in ultimul weekend din octombrie, intre sambata si duminica. Smile
Memorat

Exista 10 categorii de oameni: cei care inteleg sistemul binar si cei care nu il inteleg.
Pagini: [1]   În sus
  Imprimă  
 
Schimbă forumul:  

Powered by SMF 1.1.19 | SMF © 2006-2013, Simple Machines