Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> PRoblem z funkcją formatującą datę
dominick
post
Post #1





Grupa: Zarejestrowani
Postów: 88
Pomógł: 0
Dołączył: 30.05.2014

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


Witam temat już był wałkowany jednak proszę o pomoc.

mam funkcje, która:
-pobiera czas i zwraca relatywny czyli ile mineło od tego czasu. Funkcja działa ale jeżeli ktoś doda coś o 23:00 to przez 24 godziny wyświetla mu się "dzisiaj". Chciałbym aby wyświetlało się już wczoraj a po 2 dniach wyświetlała się data w formacie d-m w tym, że miesiąc po polsku a nie liczba.

Czy ktoś wie jak przerobić istniejącą już i działającą funkcje?
funkcja dla czasu relatywnego:

  1. public static function relative($time, $dateformat = 'd.m.Y, H:i')
  2. {
  3. $peroid = array('minute' => 60, 'hour' => 3600, 'day' => 86400, 'week' => 604800);
  4. $time = time()-strtotime($time);
  5.  
  6.  
  7.  
  8. if(($time/$peroid['hour']) < 24)
  9. {
  10.  
  11.  
  12. if(round($time/$peroid['hour']) >= 0 and round($time/$peroid['hour']) <= 24)
  13. return 'dzisiaj';
  14.  
  15. return 'dzisiaj';
  16. }
  17.  
  18. elseif(($time/$peroid['day']) < 7)
  19. {
  20. if(floor(($time/$peroid['day'])) == 1)
  21. return 'wczoraj';
  22.  
  23. if(floor(($time/$peroid['day'])) == 2)
  24. return 'przedwczoraj';
  25.  
  26. return floor(($time/$peroid['day'])) . ' dni temu';
  27. }
  28.  
  29. elseif(($time/$peroid['week']) < 4)
  30. {
  31. if(floor(($time/$peroid['week'])) == 1)
  32. return 'tydzień temu';
  33.  
  34. return floor(($time/$peroid['week'])) . ' tygodnie temu';
  35. }
  36. else
  37. {
  38. return date($dateformat, time()+$time);
  39. }
  40. }


sposób wyświetlania czasu
  1. <?php echo date::relative($a->annoucement_date_added, 'announcement') ?>

Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kalipek
post
Post #2





Grupa: Zarejestrowani
Postów: 43
Pomógł: 13
Dołączył: 3.02.2011

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


  1. class StupidDateTime extends DateTime {
  2.  
  3. public function __construct($time='now', $timezone='Europe/Warsaw')
  4. {
  5. parent::__construct($time, new DateTimeZone($timezone));
  6. }
  7.  
  8. public function format($format)
  9. {
  10. return $this->enToPl(parent::format($format));
  11. }
  12.  
  13. private function enToPl($format)
  14. {
  15. $en = ['January','February','March','April','May'];
  16. $en2 = ['Jan','Feb','Mar','Apr','May'];
  17. $pl = ['Stycznia','Lutego','Marca','Kwietnia','Maja'];
  18. $pl2 = ['Sty','Lut','Mar','Kwi','Maj'];
  19. return str_replace($en2, $pl2, str_replace($en, $pl, $format));
  20. }
  21. }


dopisz pozostałe miesiące, dodaj do autoloadera czy jakkolwiek dodajesz klasy, później w funkcji relative zamień DateTime na StupidDateTime
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: 13.10.2025 - 18:29