Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] unixtime / dni / unixtime /dni o_0
paw-e-l
post
Post #1





Grupa: Zarejestrowani
Postów: 115
Pomógł: 23
Dołączył: 27.06.2009
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


z góry przepraszam że zawracam wam głowę takimi pierdołami ale na tę chwilę utknąłem
  1. $time = '1254697863'; // jakaś data w formacie unixowym
  2. echo 'unix: '.$time.' date: '.date('G:m j.m.Y', $time).'<br />';
  3. $day = floor($time/86400);
  4. echo 'day: '.$day.' unix from day: '.($day*86400).' date from day: '.date('G:m j.m.Y', $day*86400);


już tłumaczę o co tu chodzi. otóż w linii 3 obliczam numer dnia od początku ery unixowej. w linii 4 idę w drugą stronę, przeliczam ilość dni na sekundy a następnie wyświetlam datę. no i tutaj zonk (IMG:style_emoticons/default/sciana.gif) zamierzonym wynikiem była data taka sama jak na początku skryptu a wyszła przesunięta o dzień. wydedukowałem że przesunięcie tak naprawdę wynosi 2 godziny tylko skąd to się bierze i jak to rozwiązać (oczywiście bez dodawania tych 2 godzin)?

P.s. zważywszy na późną porę proszę o wyrozumiałość jeśli ten post nie ma sensu (IMG:style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
cojack
post
Post #2





Grupa: Zarejestrowani
Postów: 898
Pomógł: 80
Dołączył: 31.05.2008

Ostrzeżenie: (20%)
X----


Po cholerę tam mnożysz a tu dzielisz? Robisz 2x jedno i to samo?
Go to the top of the page
+Quote Post
paw-e-l
post
Post #3





Grupa: Zarejestrowani
Postów: 115
Pomógł: 23
Dołączył: 27.06.2009
Skąd: Jaworzno

Ostrzeżenie: (0%)
-----


Cytat(cojack @ 5.10.2009, 22:13:45 ) *
Po cholerę tam mnożysz a tu dzielisz? Robisz 2x jedno i to samo?


otóż są to 2 fragmenty kodu
  1. najpierw przeliczam unixtime na dzień (np dzisiaj mamy 14522 dzień ery unixowej). ten unikalny numer dla każdego dnia pozwala mi zapisywać w bazie statystyki, np dzienną ilość wyświetleń jakiejś podstrony. dzięki temu mogę łatwo sortować zasoby np wg. sumy wyświetleń z jakiegoś przedziału dni.
  2. problem występował (tak mi się wydawało) w drugiej części podanego kodu gdzie przeliczam dzień (np 14522) na normalną datę. tutaj występowało przekłamanie o 2 godziny o czym wspomniałem wcześniej.


źródłem tego przesunięcia okazała się jednak pierwsza część kodu (unixtime na dzień). rozwiązałem to tak
  1. $day = floor((time()+7200)/86400)

działa tak jak powinno choć pewnie nigdy się nie dowiem dlaczego muszę dodawać 7200s żeby było ok.

@up, round() nie wchodzi w gre gdyż obliczanie numeru dnia w ten sposób w godzinach południowych dawałoby dzień następny (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował paw-e-l 5.10.2009, 22:41:29
Go to the top of the page
+Quote Post
zegarek84
post
Post #4





Grupa: Zarejestrowani
Postów: 1 332
Pomógł: 294
Dołączył: 12.10.2008
Skąd: Olkusz

Ostrzeżenie: (0%)
-----


Cytat(paw-e-l @ 5.10.2009, 23:31:16 ) *
źródłem tego przesunięcia okazała się jednak pierwsza część kodu (unixtime na dzień). rozwiązałem to tak
  1. $day = floor((time()+7200)/86400)

działa tak jak powinno choć pewnie nigdy się nie dowiem dlaczego muszę dodawać 7200s żeby było ok.

Cytat(PHP_manual_-_pl.php.net)
Cytat
float floor ( float $value )

Returns the next lowest integer value by rounding down value if necessary.

chciałeś liczby całkowite to masz ale bez tego co jest po przecinku (IMG:style_emoticons/default/winksmiley.jpg) - no, a, że dopiero od tej wartości chcesz wrócić do początkowej to brakuje Ci tego po przecinku i:
2*60*60 [2h * 60min * 60s] = 7200s (IMG:style_emoticons/default/winksmiley.jpg) [do całości - czyli reszty masz 86400-7200=79200s które floor wyrzuci (IMG:style_emoticons/default/winksmiley.jpg) ] - i w sumie na to przybliżenie to jest zależne od pory dnia (IMG:style_emoticons/default/winksmiley.jpg)
Cytat( @ 5.10.2009, 23:31:16 )
@up, round() nie wchodzi w gre gdyż obliczanie numeru dnia w ten sposób w godzinach południowych dawałoby dzień następny

odpowiedź na jedno z pytań już dostałeś, trochu znowu już wypiłem więc nie chce mi się analizować przykładu ale to są podstawowe równania matematyczne - i tak to traktuj a dopiero potem do tego dobieraj funkcje lub w razie potrzeby pisz własne (IMG:style_emoticons/default/winksmiley.jpg)
ps. a po co próbujesz potem $day*86400 skoro chcesz uzyskać wartość $time?? - błąd Ci wskazałem już ale teraz pytanie po co niepotrzebnie obliczasz to co już masz w jednej ze zmiennych??

poza tym obliczasz:
date('G:m j.m.Y', $time)
a niżej date('G:m j.m.Y', $day*86400) i chcesz uzyskać ten sam wynik to może obliczył byś to raz i wrzucił to do jakiejś zmiennej a potem wyświetlał jej wartość?? - tak wiem - wyniki mogą być różne przez to przybliżenie floor - choć tak wiem teraz to "naprawiłeś" [dla mnie to nie jest naprawa problemu - trzeba problem zrozumieć a nie tylko łatać dziury a potem dziurę na dziurze (IMG:style_emoticons/default/winksmiley.jpg) ] okrężną drogą dodając do całości - floor działa tak że jak masz 1,9 to otrzymasz 1 (IMG:style_emoticons/default/winksmiley.jpg)

Ten post edytował zegarek84 5.10.2009, 23:17:15
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 13:10