Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: pokazywanie daty w formie 4 dni temu .. itp
Forum PHP.pl > Forum > Gotowe rozwiązania > Szukam
acztery
Szukam skryptu na szybko który bedzie pokazywal mi date 4 dni temu, 5 dni temu, 6 dni temu 1 tydzien temu, 22.09.207 albo 1 minute temu itp... ma moze ktos takie cos ( to jest tu na forum ) fajnie by było jak by wyliczało date na podstawie time();
acztery
myślisz ze nie wiem do czego jest mktime. Tak bezsensowne wypowiedzi sobie daruj ......
Kisiol_Ent
No ja spojrzalem na ten link, a sie na php nie znam, i chyba ty tez sie nieznasz bo to mktime mozna latwo
wykorzytsac do napisania takiej funkcji wlasnie.
acztery
ja szukam gotowac, pozatym mktime to jedna z funkcji a to bedzie kilka dziesta lini kodu. to tak jak by napisac ze do napisania cms przyda sie tylko funckje np echo. Temat juz nie aktualna pozatym.
Kisiol_Ent
masz gotowca biggrin.gif [bardzo profesjonalny kod]
- postestuju, zglos bledy, to zrobie werjse 0.2

  1. <?php
  2.  
  3.  // v0.1
  4.  // d1 wieksza data, d2 mniejsza data (wczesniejsza))
  5.  function Date2 ($d1, $d2)
  6.  {
  7. $Tmp = $d1 - $d2;
  8. $Podpis = "";
  9. $out = $Tmp;
  10. // dla sekund 
  11. if ($Tmp < 60) $Podpis = "sekund";
  12. // dla minut
  13. if (($Tmp >= 60) && ($Tmp < 60*60))
  14. {
  15.  $Podpis = "minut";
  16.  $out = $Tmp / 60;
  17. }
  18. // dla godzin
  19. if (($Tmp >= 60*60) && ($Tmp < 60*60*24))
  20. {
  21.  $Podpis = "godzin";
  22.  $out = $Tmp / (60*60);
  23. }
  24. // dla dni
  25. if (($Tmp >= 60*60*24) && ($Tmp < 60*60*24*30))
  26. {
  27.  $Podpis = "dni";
  28.  $out = $Tmp / (60*60*24);
  29. }
  30. // dla miesiecy 
  31. if ($Tmp >= 60*60*24*30)
  32. {
  33.  $Podpis = "miesiecy";
  34.  $out = $Tmp / (60*60*24*30);
  35. } 
  36.  
  37. return floor($out)." ".$Podpis." temu";  
  38.  }
  39.  
  40.  // int mktime ( int $godzina, int $minuta, int $sekunda, int $miesiąc, int $dzień, int $ro
    k [, int $letni/zimowy] )
  41.  echo Date2( mktime (1,1,56,2,3,1998), mktime (1,1,1,2,3,1998) );
  42.  echo "<br />";
  43.  echo Date2( mktime (1,3,56,2,3,1998), mktime (1,1,1,2,3,1998) );
  44.  echo "<br />";
  45.  echo Date2( mktime (11,6,56,2,3,1998), mktime (1,1,1,2,3,1998) );
  46.  echo "<br />";
  47.  echo Date2( mktime (11,6,56,2,25,1998), mktime (1,1,1,2,3,1998) );
  48.  echo "<br />";
  49.  echo Date2( mktime (11,6,56,6,25,1998), mktime (1,1,1,2,3,1998) );
  50. ?>
acztery
dzięki za pomoc ale juz dawno nie aktualne.

pozatym.

1. koncówki minitę/minuty dni/dzien godzinę/godziny a ty tak nie ma
2. miesiac czemu 30 dni questionmark.gif? a luty questionmark.gif
pozatym

jak jest 4 miesiace i 34 minuty pokaze tyklo "4 miesiace"

i gdzie zjadłes tygodnie....

tak i tak luzik
Kisiol_Ent
No wiesz ale po 20 minutach miales już coś odpisanego i gotowego, staralem sie jak moglem;d

--- dzięki za pomoc ale juz dawno nie aktualne.
no robiłem tak szybko jak tylko mogłem

--- koncówki minitę/minuty dni/dzien godzinę/godziny a ty tak nie ma
sa ale w wersji PRO (płatnej - 1,99zl/rok)

--- miesiac czemu 30 dni ? a luty
tu sie osmieszyles...

--- jak jest 4 miesiace i 34 minuty pokaze tyklo "4 miesiace"
no bo tak ma pokazac... posta zostal edytowany 4 lata i 7 sekund temu... biggrin.gif ...

--- i gdzie zjadłes tygodnie....
no tygodnie tez w wersji PRo tylko

--- tak i tak luzik
smile.gif
wrzuce tu wersje 0.2 niedlugo ;d
acztery
ma pro za free

  1. <?php
  2.  
  3. /*
  4.  SPOSÓB UŻYCIA:
  5.  $wynik = getDiff($time);
  6.  
  7.  $time = czas zwrócony przez funkcję time()
  8. */
  9.  
  10. function getMinutes($minut)
  11. {
  12. // j.pol
  13. switch($minut)
  14. {
  15. case 0: return 0; break;
  16. case 1: return 1; break;
  17. case ($minut >= 2 && $minut <= 4):
  18. case ($minut >= 22 && $minut <= 24):
  19. case ($minut >= 32 && $minut <= 34):
  20. case ($minut >= 42 && $minut <= 44):
  21. case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break;
  22. default: return "$minut minut temu"; break;
  23. }
  24. return -1;
  25. }
  26.  
  27. function getDiff($timestamp)
  28. {
  29. $now = time();
  30.  
  31. if ($timestamp > $now) {
  32. echo 'Podana data nie może być większa od obecnej.'; // tutaj była 'zła data'
  33. return;
  34. }
  35.  
  36. $diff = $now - $timestamp;
  37.  
  38. $minut = floor($diff/60);
  39. $godzin = floor($minut/60);
  40. $dni = floor($godzin/24);
  41.  
  42. if ($minut <= 60) {
  43. $res = getMinutes($minut);
  44. switch($res) 
  45. {
  46. case 0: return "przed chwilą";
  47. case 1: return "minutę temu";
  48. default: return $res;
  49. }
  50. }
  51.  
  52. if ($godzin > 6 && $godzin < 24) {
  53. return "Dzisiaj ".date("H:i:s", $timestamp);
  54. }
  55. elseif ($godzin > 0 && $godzin < 24) {
  56. $restMinutes = ($minut-(60*$godzin));
  57. $res = getMinutes($restMinutes);
  58. if ($godzin == 1) {
  59. return "Godzinę temu ".$res;
  60. } else {
  61. return "$godzin godzin temu ".$res;
  62. }
  63. }
  64.  
  65. if ($godzin >= 24 && $godzin <= 48) {
  66. return "Wczoraj ".date("H:i:s", $timestamp);
  67. }
  68.  
  69. switch($dni)
  70. {
  71. case ($dni < 7): return "$dni dni temu, ".date("Y-m-d", $timestamp); break;
  72. case 7: return "Tydzień temu, ".date("Y-m-d", $timestamp); break;
  73. case ($dni > 7 && $dni < 14): return "Ponad tydzień temu, ".date("Y-m-d", $timestamp); break;
  74. case 14: return "Dwa tygodznie temu, ".date("Y-m-d", $timestamp); break;
  75. case ($dni > 14 && $dni < 30): return "Ponad 2 tygodnie temu, ".date("Y-m-d", $timestamp); break;
  76. case 30: case 31: return "Miesiąc temu"; break;
  77. case ($dni > 31): return date("Y-m-d", $timestamp); break;
  78. }
  79. return date("Y-m-d", $timestamp);
  80. }
  81.  
  82. ?>
JamalBIG
Moglby mi ktos pomoc 'wdrozyc' ten kod w zycie? Mam date w nastepujacej formie: 2008-08-06 20:37:52 , jak ja dodac do tego kodu zeby prawidlowo odczytywal, zrobilem to w nastepujacy sposob ale wywala mi date 1970-01-01...
  1. <?php
  2.  
  3. /*
  4.  SPOSÓB UŻYCIA:
  5.  $wynik = getDiff($time);
  6.  
  7.  $time = czas zwrócony przez funkcję time()
  8. */
  9.  
  10.  
  11. function getMinutes($minut)
  12. {
  13. // j.pol
  14. switch($minut)
  15. {
  16. case 0: return 0; break;
  17. case 1: return 1; break;
  18. case ($minut >= 2 && $minut <= 4):
  19. case ($minut >= 22 && $minut <= 24):
  20. case ($minut >= 32 && $minut <= 34):
  21. case ($minut >= 42 && $minut <= 44):
  22. case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break;
  23. default: return "$minut minut temu"; break;
  24. }
  25. return -1;
  26. }
  27.  
  28. function getDiff($timestamp)
  29. {
  30. $timestamp = "2008-08-06 20:37:52";
  31. $now = time();
  32.  
  33. if ($timestamp > $now) {
  34. echo 'Podana data nie może być większa od obecnej.'; // tutaj była 'zła data'
  35. return;
  36. }
  37.  
  38. $diff = $now - $timestamp;
  39.  
  40. $minut = floor($diff/60);
  41. $godzin = floor($minut/60);
  42. $dni = floor($godzin/24);
  43.  
  44. if ($minut <= 60) {
  45. $res = getMinutes($minut);
  46. switch($res) 
  47. {
  48. case 0: return "przed chwilą";
  49. case 1: return "minutę temu";
  50. default: return $res;
  51. }
  52. }
  53.  
  54. if ($godzin > 6 && $godzin < 24) {
  55. return "Dzisiaj ".date("H:i:s", $timestamp);
  56. }
  57. elseif ($godzin > 0 && $godzin < 24) {
  58. $restMinutes = ($minut-(60*$godzin));
  59. $res = getMinutes($restMinutes);
  60. if ($godzin == 1) {
  61. return "Godzinę temu ".$res;
  62. } else {
  63. return "$godzin godzin temu ".$res;
  64. }
  65. }
  66.  
  67. if ($godzin >= 24 && $godzin <= 48) {
  68. return "Wczoraj ".date("H:i:s", $timestamp);
  69. }
  70.  
  71. switch($dni)
  72. {
  73. case ($dni < 7): return "$dni dni temu, ".date("Y-m-d", $timestamp); break;
  74. case 7: return "Tydzień temu, ".date("Y-m-d", $timestamp); break;
  75. case ($dni > 7 && $dni < 14): return "Ponad tydzień temu, ".date("Y-m-d", $timestamp); break;
  76. case 14: return "Dwa tygodznie temu, ".date("Y-m-d", $timestamp); break;
  77. case ($dni > 14 && $dni < 30): return "Ponad 2 tygodnie temu, ".date("Y-m-d", $timestamp); break;
  78. case 30: case 31: return "Miesiąc temu"; break;
  79. case ($dni > 31): return date("Y-m-d", $timestamp); break;
  80. }
  81. return date("Y-m-d", $timestamp);
  82. }
  83.  
  84.  $wynik = getDiff($time);
  85. echo "$wynik";
  86. ?>
ayeo
  1. <?php
  2. /*
  3.  SPOSÓB UŻYCIA:
  4.  $wynik = getDiff($time);
  5.  
  6.  $time = czas zwrócony przez funkcję time()
  7. */
  8. ?>


zmienną $time masz pustą!

  1. <?php
  2. $time = time();
  3. ?>


Pozdrawiam!
JamalBIG
Wrzucilem i dziala ale co bym nie wpisal w zmiennej $timestamp ciagle wyswietla sie 'przed chwila'...

  1. <?php
  2. /*
  3.  SPOSÓB UŻYCIA:
  4.  $wynik = getDiff($time);
  5.  
  6.  $time = czas zwrócony przez funkcję time()
  7. */
  8. $time = time();
  9. $timestamp = "2008-09-06 20:37:52";
  10.  
  11. function getMinutes($minut)
  12. {
  13. // j.pol
  14. switch($minut)
  15. {
  16. case 0: return 0; break;
  17. case 1: return 1; break;
  18. case ($minut >= 2 && $minut <= 4):
  19. case ($minut >= 22 && $minut <= 24):
  20. case ($minut >= 32 && $minut <= 34):
  21. case ($minut >= 42 && $minut <= 44):
  22. case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break;
  23. default: return "$minut minut temu"; break;
  24. }
  25. return -1;
  26. }
  27.  
  28. function getDiff($timestamp)
  29. {
  30.  
  31. $timestamp = "2008-08-06";
  32. $now = time();
  33.  
  34. if ($timestamp > $now) {
  35. echo 'Podana data nie może być większa od obecnej.'; // tutaj była 'zła data'
  36. return;
  37. }
  38.  
  39. $diff = $now - $timestamp;
  40.  
  41. $minut = floor($diff/60);
  42. $godzin = floor($minut/60);
  43. $dni = floor($godzin/24);
  44.  
  45. if ($minut <= 60) {
  46. $res = getMinutes($minut);
  47. switch($res) 
  48. {
  49. case 0: return "przed chwilą";
  50. case 1: return "minutę temu";
  51. default: return $res;
  52. }
  53. }
  54.  
  55. if ($godzin > 6 && $godzin < 24) {
  56. return "Dzisiaj ".date("H:i:s", $timestamp);
  57. }
  58. elseif ($godzin > 0 && $godzin < 24) {
  59. $restMinutes = ($minut-(60*$godzin));
  60. $res = getMinutes($restMinutes);
  61. if ($godzin == 1) {
  62. return "Godzinę temu ".$res;
  63. } else {
  64. return "$godzin godzin temu ".$res;
  65. }
  66. }
  67.  
  68. if ($godzin >= 24 && $godzin <= 48) {
  69. return "Wczoraj ".date("H:i:s", $timestamp);
  70. }
  71.  
  72. switch($dni)
  73. {
  74. case ($dni < 7): return "$dni dni temu, ".date("Y-m-d", $timestamp); break;
  75. case 7: return "Tydzień temu, ".date("Y-m-d", $timestamp); break;
  76. case ($dni > 7 && $dni < 14): return "Ponad tydzień temu, ".date("Y-m-d", $timestamp); break;
  77. case 14: return "Dwa tygodznie temu, ".date("Y-m-d", $timestamp); break;
  78. case ($dni > 14 && $dni < 30): return "Ponad 2 tygodnie temu, ".date("Y-m-d", $timestamp); break;
  79. case 30: case 31: return "Miesiąc temu"; break;
  80. case ($dni > 31): return date("Y-m-d", $timestamp); break;
  81. }
  82. return date("Y-m-d", $timestamp);
  83. }
  84.  
  85.  $wynik = getDiff($time);
  86. echo "$wynik";
  87. ?>
Kicok
  1. <?php
  2.  
  3. $time = time();
  4. $timestamp = "2008-09-06 20:37:52";
  5.  
  6. ?>


na:
  1. <?php
  2.  
  3. $time = strtotime( '2008-09-06 20:37:52' );
  4.  
  5. ?>
(albo mktime" title="Zobacz w manualu PHP" target="_manual ;])
Rude Dude
Ten skrypt ma w sobie błąd. Np. jeśli data poda jako arg funkcji to np. 2008-08-24 20:00:00, a teraz jest (dzisiaj: 2008-08-25 17:00:00) to wyświetli się komunikat "dzisiaj 20:00:00", a powinno byc "wczoraj 20:00:00".

Jeśli jako argument funkcji getDiff podamy date 2008-08-24 12:00:00, a teraz jest 2008-08-25 17:00:00 to poprawnie wyświetli się komunikat "wczoraj 12:00:00", a to dlatego że minęlo ponad 24h. Tyle że to czy jest dziś czy wczoraj zależy nie od upłynięcia 24h a od upłynięcia północy.

Błąd jest w tych linijkach:

CODE
if ($godzin > 6 && $godzin < 24) {
return "dzisiaj ".date("H:i:s", $timestamp);
}
elseif ($godzin > 0 && $godzin < 24) {
$restMinutes = ($minut-(60*$godzin));
$res = getMinutes($restMinutes);
if ($godzin == 1) {
return "godzinę temu ".$res;
} else {
return "$godzin godzin temu ".$res;
}
}

if ($godzin >= 24 && $godzin <= 48) {
return "wczoraj ".date("H:i:s", $timestamp);
}


Zamiast liczb 24 mozna byc uzywac date("H"); bieżącej godziny do porównywania czy mamy wyświetlić w komunikacie dzisiaj lub wczoraj.

Próbowałem rozgryźć ten kod ale jak mi się udało jedno naprawić to inna rzecz przestawała działać. Mianowicie
co jeśli porównujemy daty 2008-08-24 23:59:00 albo 2008-08-25 00:00:01 gdzie przedział czasu jest krótszy niż 1h i skrypt tu też się gubi nie odróżniając czy jest dziś czy wczoraj.

Pomęczę sie jeszcze trochę z tym skryptem, może wreszcie zacznie mi to działać prawidłowo.

Zna ktoś jakiś opensourcowy skrypt podobny do tego?
Na last.fm mają fajnie to zrobione ponieważ w komunikatach są nawet dni podane, w poniedziałek rano, w niedzielę po południu, itp
unloco
ODŚWIEŻAM temat gdyż sam takie coś potrzebuję. Jak na razie udało mi się napisać funkcję która oblicza ile minut i godzin minęło ale gdy czasu jest ponad 24 godziny skrypt nie działa. Zresztą ten co oblicza godziny też mi się sam w sobie przyda, żeby użytkownik nie dodawał kolejnych danych do bazy częściej niż powiedzmy 15minut. Może ma ktoś jakiś gotowy który wyświetli również ilość dni i godzin.

Przydałaby się funkcja która skorzysta z tych dwóch zmiennych:

  1. $written_date = date('d-m-Y');
  2. $written_time = date('H:i');


Lub połączenie tych dwóch. Myślę, że jak się je połączy poprzez ".=" i przypisze do trzeciej zmiennej to ta trzecia zmienna powinna być wprowadzana do funkcji która zwróci ile czasu upłynęło.

Cwaniacy których większość postów polega na odsyłaniu do googli lub php manuala informuję - szukałem wczoraj w nocy bo szybciej by trwało znalezienie tego niż czekanie na odpowiedź na forum. Bez rezultatu.

Za konstruktywne odpowiedzi jak i porady - z góry dziękuję
Rude Dude
Temat już bardzo stary. Mogę zapodać funkcje które aktualnie używam.
  1. /*
  2.  Źródło: <a href="http://forum.php.pl/index.php?showtopic=76721&pid=502507&mode=threaded&start=#entry502507" target="_blank">http://forum.php.pl/index.php?showtopic=76...rt=#entry502507</a>
  3.  @ Powprowadzałem poprawki do kodu
  4.  SPOSÓB UŻYCIA:
  5.  $time = czas zwrócony przez funkcję time()
  6.  $wynik = getDiff($time);
  7.  
  8. */
  9.  
  10.  
  11. /*
  12.   * PHP port of Ruby on Rails famous distance_of_time_in_words method.
  13.   * See <a href="http://api.rubyonrails.com/classes/ActionView/Helpers/DateHelper.html" target="_blank">http://api.rubyonrails.com/classes/ActionV...DateHelper.html</a> for more details.
  14.   *
  15.   * Reports the approximate distance in time between two timestamps. Set include_seconds
  16.   * to true if you want more detailed approximations.
  17.   *
  18. Źródło: <a href="http://pl2.php.net/manual/pl/function.time.php" target="_blank">http://pl2.php.net/manual/pl/function.time.php</a>
  19.   */
  20. function getDiff($from_time, $to_time = 0, $include_seconds = true) {
  21. $from_time = strtotime($from_time);
  22. $to_time = time();
  23.  
  24. $distance_in_minutes = round(abs($to_time - $from_time) / 60);
  25. $distance_in_seconds = round(abs($to_time - $from_time));
  26.  
  27. if ($distance_in_minutes >= 0 and $distance_in_minutes <= 1) {
  28. if (!$include_seconds) {
  29. return ($distance_in_minutes == 0) ? 'mniej niż minutę temu' : 'minutę temu';
  30. } else {
  31. if ($distance_in_seconds >= 0 and $distance_in_seconds <= 4) {
  32. return 'mniej niż 5 sekund temu';
  33. } elseif ($distance_in_seconds >= 5 and $distance_in_seconds <= 9) {
  34. return 'mniej niż 10 sekund temu';
  35. } elseif ($distance_in_seconds >= 10 and $distance_in_seconds <= 19) {
  36. return 'mniej niż 20 sekund temu';
  37. } elseif ($distance_in_seconds >= 20 and $distance_in_seconds <= 39) {
  38. return 'pół minuty temu';
  39. } elseif ($distance_in_seconds >= 40 and $distance_in_seconds <= 59) {
  40. return 'mniej niż minutę temu';
  41. } else {
  42. return 'minutę temu';
  43. }
  44. }
  45. } elseif ($distance_in_minutes >= 2 and $distance_in_minutes <= 44) {
  46. return $distance_in_minutes . ' min temu';
  47. } elseif ($distance_in_minutes >= 45 and $distance_in_minutes <= 89) {
  48. return 'godzinę temu';
  49. } elseif ($distance_in_minutes >= 90 and $distance_in_minutes <= 1439) {
  50. return round(floatval($distance_in_minutes) / 60.0) . ' godzin temu';
  51. } elseif ($distance_in_minutes >= 1440 and $distance_in_minutes <= 2879) {
  52. return 'wczoraj';
  53. } elseif ($distance_in_minutes >= 2880 and $distance_in_minutes <= 43199) {
  54. return round(floatval($distance_in_minutes) / 1440) . ' dni temu';
  55. } elseif ($distance_in_minutes >= 43200 and $distance_in_minutes <= 86399) {
  56. return 'miesiąc temu';
  57. } elseif ($distance_in_minutes >= 86400 and $distance_in_minutes <= 525599) {
  58. return round(floatval($distance_in_minutes) / 43200) . ' miesięcy temu';
  59. } elseif ($distance_in_minutes >= 525600 and $distance_in_minutes <= 1051199) {
  60. return 'rok temu';
  61. } else {
  62. return 'ponad ' . round(floatval($distance_in_minutes) / 525600) . ' lat temu';
  63. }
  64. }
  65.  
  66.  
  67. #-------------------------------------------------------------------------------------
  68.  
  69. // drugi arg okresla czy wyswietlic czysty tekst bez html
  70. function data_rzymska($data, $html=0) {
  71. // wyświetla datę w formie 09 V 1990, 16:00
  72.  
  73. //przyjmowany format daty 2008-08-31 19:00:02
  74.  
  75. $rok = substr($data,0,4);
  76. $miesiac = substr($data,5,2);
  77. $dzien = substr($data,8,2);
  78.  
  79. $godzina = substr($data,11,2);
  80. $minuty = substr($data,14,2);
  81. $sekundy = substr($data,17,2);
  82.  
  83. switch($miesiac) {
  84. case '01':
  85. $miesiac_rzymski = 'I';
  86. break;
  87. case '02':
  88. $miesiac_rzymski = 'II';
  89. break;
  90. case '03':
  91. $miesiac_rzymski = 'III';
  92. break;
  93. case '04':
  94. $miesiac_rzymski = 'IV';
  95. break;
  96. case '05':
  97. $miesiac_rzymski = 'V';
  98. break;
  99. case '06':
  100. $miesiac_rzymski = 'VI';
  101. break;
  102. case '07':
  103. $miesiac_rzymski = 'VII';
  104. break;
  105. case '08':
  106. $miesiac_rzymski = 'VIII';
  107. break;
  108. case '09':
  109. $miesiac_rzymski = 'IX';
  110. break;
  111. case '10':
  112. $miesiac_rzymski = 'X';
  113. break;
  114. case '11':
  115. $miesiac_rzymski = 'XI';
  116. break;
  117. case '12':
  118. $miesiac_rzymski = 'XII';
  119. break;
  120. default:
  121. $miesiac_rzymski = 'Błędny miesiąc';
  122. }
  123.  
  124. // jesli wywołamy funkcje bez dodatkowego parametru 1 to bedą sekundy mniejsza czcionka
  125. if($html == 0) {
  126. $sekundy_html = '<span class="small_text">'.$sekundy.'</span>';
  127. } else { // natomiast jesli dodamy arg drugi o wartosci 1 to tekst bedzie czysty bez html'a
  128. $sekundy_html = $sekundy;
  129. }
  130. return $dzien.' '.$miesiac_rzymski.' '.$rok.', '.$godzina.':'.$minuty.':'.$sekundy_html;
  131.  
  132.  
  133. }
zegarek84
DateTime — The DateTime class
amator2015
  1. czynienia z wyświetlaniem daty publikacji artykułów, postów lub innych wpisów.
  2.  
  3. <?php
  4. /**
  5.  * Formatuje date do formatu: Przedwczoraj[, 13:15]; Ponad tydzień temu[, 2013-06-21]
  6.  *
  7.  * @version 1.0
  8.  * @author Piotr tlenex Hebda {@link <a href="http://tlenex.pl}" target="_blank">http://tlenex.pl}</a>
  9.  * @copyright NIE usuwaj tego komentarza! (Do NOT remove this comment!)
  10.  *
  11.  * @param string $data_wejsciowa zalecana data w formacie ISO
  12.  */
  13. function formatujDate($data_wejsciowa, $show_date = true) {
  14. $okres = strtotime($data_wejsciowa);
  15. $now = time();
  16. $ending_date = "";
  17. $ending_time = "";
  18. if ($okres > $now) {
  19. return "Podana data nie może być większa od obecnej.";
  20. }
  21.  
  22. if ($show_date) {
  23. $ending_date = ", ".date("Y-m-d", $okres);
  24. $ending_time = ", ".date("H:i", $okres);
  25. }
  26.  
  27. $diff = $now - $okres;
  28.  
  29. $minut = floor($diff/60);
  30. $godzin = floor($minut/60);
  31. $dni = floor($godzin/24);
  32. $miesiecy = intval((date('Y', $now) - date('Y', $okres))*12 + (date('m', $now) - date('m', $okres)));
  33. $lata = intval(date('Y', $now) - date('Y', $okres));
  34.  
  35. if ($minut <= 60) {
  36. switch($minut) {
  37. case 0: return "przed chwilą";
  38. case 1: return "minutę temu";
  39. case ($minut >= 2 && $minut <= 4):
  40. case ($minut >= 22 && $minut <= 24):
  41. case ($minut >= 32 && $minut <= 34):
  42. case ($minut >= 42 && $minut <= 44):
  43. case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break;
  44. default: return "$minut minut temu"; break;
  45. }
  46. }
  47.  
  48. $okres_wczoraj = $now-(60*60*24);
  49. $okres_przedwczoraj = $now-(60*60*24*2);
  50.  
  51. if ($godzin > 0 && $godzin <= 6) {
  52.  
  53. if ($godzin == 1) {
  54. return "Godzinę temu ";
  55. } else {
  56. if ($godzin >1 && $godzin<5) return "$godzin godziny temu";
  57. if ($godzin >4)return "$godzin godzin temu";
  58. }
  59.  
  60. } else if (date("Y-m-d", $okres) == date("Y-m-d", $now)) {
  61. return "Dzisiaj".$ending_time;
  62. } else if (date("Y-m-d", $okres_wczoraj) == date("Y-m-d", $okres)) {
  63. return "Wczoraj".$ending_time;
  64. } else if (date("Y-m-d", $okres_przedwczoraj) == date("Y-m-d", $okres)) {
  65. return "Przedwczoraj".$ending_time;
  66. }
  67.  
  68. if ($dni > 0 && $dni <= intval(date('t', $okres))) {
  69. switch($dni) {
  70. case ($dni < 7): return "$dni dni temu".$ending_date; break;
  71. case 7: return "Tydzień temu".$ending_date; break;
  72. case ($dni > 7 && $dni < 14): return "Ponad tydzień temu".$ending_date; break;
  73. case 14: return "Dwa tygodznie temu".$ending_date; break;
  74. case ($dni > 14 && $dni < 21): return "Ponad 2 tygodnie temu".$ending_date; break;
  75. case 21: return "3 tygodnie temu, ".date("Y-m-d", $okres); break;
  76. case ($dni > 21 && $dni < 28): return "Ponad 3 tygodnie temu".$ending_date; break;
  77. case ($dni >= 28 && $dni < 32): return "Miesiąc temu"; break;
  78. }
  79. }
  80.  
  81.  
  82. if ($miesiecy > 0 && $miesiecy <= 12) {
  83. switch($miesiecy) {
  84. case 1: return "Miesiąc temu".$ending_date; break;
  85. case 2: case 4: return "$miesiecy miesiące temu".$ending_date; break;
  86. case 3: return "Ćwierć roku temu".$ending_date; break;
  87. case 6: return "Pół roku temu".$ending_date; break;
  88. case 12: return "Roku temu".$ending_date; break;
  89. default: return "$miesiecy miesiecy temu".$ending_date; break;
  90. }
  91. }
  92.  
  93. if ($lata > 0) {
  94. $lata1 = array("2", "3", "4");
  95. $lata2 = array("0", "1", "5", "6", "7", "8", "9", "12", "13", "14");
  96. if ($lata == 1) {
  97. return "Rok temu".$ending_date;
  98. } else if (in_array(substr("".$lata, -1), $lata2) || in_array(substr("".$lata, -2, 2), $lata2)) {
  99. return "$lata lat temu".$ending_date;
  100. } else if (in_array(substr((string)$lata, -1), $lata1)) {
  101. return "$lata lata temu".$ending_date;
  102. }
  103. }
  104.  
  105. return date("Y-m-d", $okres);
  106. }
  107. ?>
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-2024 Invision Power Services, Inc.