Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [php] date() powyżej 30 dni
Forum PHP.pl > Forum > PHP
shpaque
witam, mam problem z datami, ponieważ powyżej 30 dni zaczyna mi pokazywać ułamek i to zwykle taki sam, po liczbie całkowitej dni: .041666666667 - co trzeba zrobić
sazian
pokaż kod
shpaque
  1. <?
  2. $dateins = array();
  3. $dateouts = array();
  4. $titles = array();
  5. $citys = array();
  6. $streets = array();
  7. $poolnames = array();
  8. $poollengths = array();
  9. $results = array();
  10. $rozpoczecies = array();
  11. $zakonczenies = array();
  12. $newdateins = array();
  13. $i = 9;
  14. $dzisiaj = strtotime(date('Y-m-d'));
  15. $database = './db/zawody.db';
  16. $items = file($database);
  17.  
  18. foreach($items as $line)
  19. {
  20. list($datein, $dateout, $title, $city, $street, $poolname, $poollength, $result) = explode('|', trim($line));
  21. $rozpoczecie = ($dzisiaj - strtotime($datein));
  22. $zakonczenie = ($dzisiaj - strtotime($dateout));
  23. $newdatein = date('Y-m-d', ($dzisiaj - $rozpoczecie));
  24. if ($rozpoczecie > 0)
  25. {
  26. $dateins[] = $datein;
  27. $dateouts[] = $dateout;
  28. $titles[] = $title;
  29. $citys[] = $city;
  30. $streets[] = $street;
  31. $poolnames[] = $poolname;
  32. $poollengths[] = $poollength;
  33. $results[] = $result;
  34.  
  35. $rozpoczecies[] = $rozpoczecie / 86400;
  36. $zakonczenies[] = $zakonczenie / 86400;
  37. $newdateins[] = $newdatein;
  38. }
  39. }
  40. array_multisort ($newdateins, SORT_DESC, $dateins, $dateouts, $titles, $citys, $streets, $poolnames, $poollengths, $results, $rozpoczecies, $zakonczenies);
  41.  
  42. list($year, $month, $day) = split('[/.-]', $dateins[$i]);
  43. if ($month == '01') {$month2 = 'STY';}
  44. else if ($month == '02') {$month2 = 'LUT';}
  45. else if ($month == '03') {$month2 = 'MAR';}
  46. else if ($month == '04') {$month2 = 'KWI';}
  47. else if ($month == '05') {$month2 = 'MAJ';}
  48. else if ($month == '06') {$month2 = 'CZE';}
  49. else if ($month == '07') {$month2 = 'LIP';}
  50. else if ($month == '08') {$month2 = 'SIE';}
  51. else if ($month == '09') {$month2 = 'WRZ';}
  52. else if ($month == '10') {$month2 = 'PAŹ';}
  53. else if ($month == '11') {$month2 = 'LIS';}
  54. else if ($month == '12') {$month2 = 'GRU';}
  55. else {$month2 = '';}
  56. echo "$day $month2 $year";
  57. ?>
  58. </span>
  59. <span style="color:#696969;font-size:10px;font-family:'Ubuntu Condensed';font-weight:normal;font-style:normal;text-decoration:none">
  60. <?
  61. $dzien = 'dni';
  62. if ($rozpoczecies[$i] == 1)
  63. {
  64. $dzien = 'dzień';
  65. }
  66. echo "<br>$rozpoczecies[$i] $dzien temu";
  67. ?>


czytałem coś o "floor", ale w ogóle dziwne jest to, że jak mam datę dzisiaj 2013-12-09 i wyświetla mi datę 2013-10-08 - oblicza, że to 16047 dni temu...
nospor
  1. $d1 = '2013-12-09';
  2. $d2 = '2013-10-08';
  3.  
  4. $days = (strtotime($d1)-strtotime($d2)) / 86400;
  5. echo $days;

Dake poprawny wynik 62. Jesli ty dostajesz 16047 znaczy ze operujesz na innych danych niz ci sie wydaje. Juz ci zdaje sie pisalem bys sprawdzal dokladnie dane na jakich dzialasz......

var_dump()
shpaque
no dobrze, ale dlaczego w takim razie różnica do 30 lub 31 dni jest wyświetlana poprawnie? Tu chyba nie o to chodzi...

tu chodzi bardziej o to
Cytat
Różnica między datami w dniach
Doba (dzień) to 24 godziny * 60 minut * 60 sekund co zapamiętamy w zmiennej $liczba_sekund_w_dniu. Zatem różnice między datami $liczba_sekund_miedzy_datami musimy podzielić przez $liczba_sekund_w_dniu by mieć liczbę dni między datami. Gdyby pojawił się ułamek w wyniku to funkcja PHP Floor dodatkowo zaokrągla nam otrzymaną liczbę dni do dołu. Zatem wyświetli się nam informacja, że do zaćmienia słońca pozostało 5852 dni zamiast 5852,72 dni.
$liczba_sekund_w_dniu = 60 * 60 * 24;
$liczba_dni_miedzy_datami =
Floor ($liczba_sekund_miedzy_datami/$liczba_sekund_w_dniu);


nospor
podalem ci kod, ze masz poprawną roznice nawet 60 dni...
przy zmianie czas letni/zimowy tak, wyjdzie ulamek. ale tu wystarczy albo zaokraglicalbo dodawac GMT do strtotime.

ale to nie ma zadnego zwiazku z tym, ze tobie zamiast 62 wyswietla sie kilkanascie tysiecy
shpaque
ale kod jest jeden - nie zmienia się w międzyczasie...



smile.gif już wiem wszystko...

chodzi o to, że pierwsza data (ta 2013-10-08) jest pierwszym wpisem w pierwszej linijce w pliku UTF więc dochodzi BOM - i tu robi się bajzel...

czyli wystarczy albo gmdate albo floor?
nospor
Cytat
chodzi o to, że pierwsza data (ta 2013-10-08) jest pierwszym wpisem w pierwszej linijce w pliku UTF więc dochodzi BOM - i tu robi się bajzel...
i dlatego wlasnie miales zrobic VAR_DUMP()..... kurcze, nie bez powodu ci ludzie o tym pisza :/

Cytat
zyli wystarczy albo gmdate albo floor?
napisalem w poprzednim poscie co ma byc. potrzebujesz milion potwierdzen?
shpaque
widzę, że wystarczy że w temacie dalej zgasiłem kolegę Pytona kodem, do jakiego nie mógł dojść - i stałem się wrogiem publicznym nr 1..?

Nie nie trzeba - przeciez wcale nie musisz odpisywać skoro już sobie rozwiązałem problem...
nospor
LOL x 1000
Ty w ogole nie ogarniasz co sie wokol ciebie dzieje.. Kolega python podawal poprawne rozwiazanie, takie jak bylo w manualu. Ale ty tego nie ogarniales, bo nie chcialo ci sie chwile pomyslec. Potem "wpadles" na rzekome wlasne rozwiazanie, ktore rowniez wykorzystywalo array_multisort tylko ciut inaczej. Obie metody byly opisane w manualu i obie byly poprawne.

Teraz tutaj to samo: podalem ci, ze masz zle wartosci dat niz ci sie wydaje i ze masz uzyc var_dump by to sprawdzic. na to nagle ty ze sam znalazles rozwiazanie, bo pierwsza data byla z BOM....czyli defacto miala inna wartosc niz myslales, co ja na samym poczatku od razu ci napisalem.....LOL.

Skoro wiec tak "sam" wszystko rozwiazujesz to po co tu w ogole przychodzisz?
shpaque
bo czasami mi tutaj ktos pomogl - tak jak Ty dzisiaj - zal mi tylko czasem jak wracajac do tamtego tematu - ze stracilem na glupi kawalek skryptu 2,5 tyg - ktory ktos moglby mi podsunac w 5 minut a nie kopiowac z manuala - to oznacza ze cale g. zna sie na php tylko zna ctrl+c i ctrl+v - osoba ktora zna jezyk od razu podsunela by mi wskazowki ze trzeba wywalić [$count] i dac pusty array [], ze trzeba to i tamto zrobic... Ale po co to juz rozgrzebywac.

Generalnie chodzi o to, ze zalozenie tego forum jest aby ludzie pomagali - tak? czyli wyjasniali takim tlumokom jak ja co gdzie moze byc zle, bo jesli chodzi o manual i chcialbym wiedziec co robi zadal bym pytanie: czego szukac w manualu zeby zrobic to to to i to, a nie zadawal pytanie z kodem: co trzebna tutaj zrobic zeby zadzialo - sugeruje to ze chce udoskonalic moj kod, a nie zamienic na example z manuala. Tyle w temacie...

Ale tak jak mowia - ze stereotypowym informatykiem porozumiesz sie tylko metodą zero-jedynkową...
nospor
Cytat
Ale po co to juz rozgrzebywac.

Sam ni z gruszki ni z pietruszki wyjezdzasz z durnym tekstem, ktory nie ma nic wspolnego z tym tematem:
Cytat
widzę, że wystarczy że w temacie dalej zgasiłem kolegę Pytona kodem, do jakiego nie mógł dojść - i stałem się wrogiem publicznym nr 1..?
i na dodatek cos sobie ubzdurales jak to kogos zgasiles....

po ra z kolejny powtrzam: dostales od pythona poprawny kod. dal ci gotowca. skopiowal z manuala i dostosowal do twojego konkretnego kodu. miales wszystko zrobione.

przestan wiec gadać jak to zgasiles pythona pokazujac mu inne rozwiazanie ktore "dziala" bo to nie ty go zgasiles... przyjmij to wkoncu do wiadomosci bo ta twoja gatka jest juz nudna
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.