Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Funkcja formatująca date w format "wczoraj, dzisiaj, minutę temu"
Forum PHP.pl > Forum > Przedszkole
kukix
Witam.
Poszukuje funkcje, która przekstałci mi date w formacie 0000-00-00 00:00:00 na date typu "6 godzin temu", "3 dni temu, 2009-04-17"..


Dysponuje nastepującym kodem.. jednak dla dni z pierwszego tygodnia źle działa... sciana.gif

  1. <?php
  2. /**
  3. * Pod funkcja do funkcji formatującej date.
  4. *
  5. * @param string   $minut
  6. */
  7.  
  8. function getMinutes($minut)
  9. {
  10.    // j.pol
  11.    switch($minut)
  12.    {
  13.        case 0: return 0; break;
  14.        case 1: return 1; break;
  15.        case ($minut >= 2 && $minut <= 4):
  16.        case ($minut >= 22 && $minut <= 24):
  17.        case ($minut >= 32 && $minut <= 34):
  18.        case ($minut >= 42 && $minut <= 44):
  19.        case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break;
  20.        default: return "$minut minut temu"; break;
  21.    }
  22.    return -1;
  23. }
  24.  
  25. /**
  26. * Formatuje date
  27. *
  28. * @param string   $data_wejsciowa             data w formacie 000-00-00 00:00:00
  29. */
  30.  
  31. function formatujDate($data_wejsciowa){
  32.  
  33.    $timestamp = strtotime($data_wejsciowa);
  34.  
  35.    $now = time();
  36.  
  37.    if ($timestamp > $now) {
  38.      return 'Podana data nie może być większa od obecnej.';
  39.    }
  40.  
  41.    $diff = $now - $timestamp;
  42.  
  43.    $minut = floor($diff/60);
  44.    $godzin = floor($minut/60);
  45.    $dni = floor($godzin/24);    
  46.  
  47.    if ($minut <= 60) {
  48.      $res = getMinutes($minut);
  49.      switch($res)
  50.      {
  51.        case 0: return "przed chwilą";
  52.        case 1: return "minutę temu";
  53.        default: return $res;
  54.      }    
  55.    }
  56.  
  57.    $timestamp_wczoraj = $now-(60*60*24);
  58.    $timestamp_przedwczoraj = $now-(60*60*24*2);
  59.  
  60.    if ($godzin > 0 && $godzin <= 6) {
  61.  
  62.      $restMinutes = ($minut-(60*$godzin));
  63.      $res = getMinutes($restMinutes);
  64.      if ($godzin == 1) {
  65.        return "Godzinę temu ";//.$res
  66.      } else {
  67.        return "$godzin godzin temu ";
  68.      }
  69.  
  70.    } else if (date("Y-m-d", $timestamp) == date("Y-m-d", $now)) {//jesli dzisiaj
  71.      return "Dzisiaj ".date("H:i", $timestamp);
  72.    } else if (date("Y-m-d", $timestamp_wczoraj) == date("Y-m-d", $now)) {//jesli wczoraj
  73.      return "Wczoraj ".date("H:i", $timestamp);
  74.    } else if (date("Y-m-d", $timestamp_przedwczoraj) == date("Y-m-d", $now)) {//jesli wczoraj
  75.      return "Przedwczoraj ".date("H:i", $timestamp);
  76.    }
  77.  
  78.    switch($dni)
  79.    {
  80.      case ($dni < 7): return "$dni dni temu, ".date("Y-m-d", $timestamp); break;
  81.      case 7: return "Tydzień temu, ".date("Y-m-d", $timestamp); break;
  82.      case ($dni > 7 && $dni < 14): return "Ponad tydzień temu, ".date("Y-m-d", $timestamp); break;
  83.      case 14: return "Dwa tygodznie temu, ".date("Y-m-d", $timestamp); break;
  84.      case ($dni > 14 && $dni < 30): return "Ponad 2 tygodnie temu, ".date("Y-m-d", $timestamp); break;
  85.      case 30: case 31: return "Miesiąc temu"; break;    
  86.      case ($dni > 31): return date("Y-m-d H:i", $timestamp); break;    
  87.    }
  88.    return date("Y-m-d", $timestamp);          
  89. }
  90. ?>


Bede bardzo wdzięczny za wszelkie wypowiedzi.
shine
kilka przykladow uzycia funkcji strtotime():

  1. <?php
  2. echo strtotime ("now"), "\n";
  3. echo strtotime ("10 September 2000"), "\n";
  4. echo strtotime ("+1 day"), "\n";
  5. echo strtotime ("+1 week"), "\n";
  6. echo strtotime ("+1 week 2 days 4 hours 2 seconds"), "\n";
  7. echo strtotime ("next Thursday"), "\n";
  8. echo strtotime ("last Monday"), "\n";
  9. ?>


przypisujesz sobie np.
  1. <?php
  2. $kiedy = strtotime("-6 hours");
  3. ?>

i wyswietlasz date w okreslonym przez Ciebie formacie np:

  1. <?php
  2. echo date("Ymd h:i:s", $kiedy);
  3. ?>
klocu
@shine: chyba nie skumałeś o co chodzi. nie cofnąć datę, tylko pokazać ją w formacie dla średnio kumatego człowieka
@kukix: rzuć okiem na to (link na końcu). kiedyś napisałem z nudów - może jak troszkę zmodyfikujesz to spełni Twoje oczekiwania http://forum.php.pl/index.php?showtopic=96974
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.