Bardzo przydatna funkcja gdy mamy do czynienia z wyświetlaniem daty publikacji artykułów, postów lub innych wpisów.
<?php /** * Formatuje date do formatu: Przedwczoraj[, 13:15]; Ponad tydzień temu[, 2013-06-21] * * @version 1.0 * @author Piotr tlenex Hebda {@link http://tlenex.pl} * @copyright NIE usuwaj tego komentarza! (Do NOT remove this comment!) * * @param string $data_wejsciowa zalecana data w formacie ISO */ function formatujDate($data_wejsciowa, $show_date = true) { $okres = strtotime($data_wejsciowa); $now = time(); $ending_date = ""; $ending_time = ""; if ($okres > $now) { return "Podana data nie może być większa od obecnej."; } if ($show_date) { $ending_date = ", ".date("Y-m-d", $okres); $ending_time = ", ".date("H:i", $okres); } $diff = $now - $okres; $minut = floor($diff/60); $godzin = floor($minut/60); $dni = floor($godzin/24); $miesiecy = intval((date('Y', $now) - date('Y', $okres))*12 + (date('m', $now) - date('m', $okres))); $lata = intval(date('Y', $now) - date('Y', $okres)); if ($minut <= 60) { switch($minut) { case 0: return "przed chwilą"; case 1: return "minutę temu"; case ($minut >= 2 && $minut <= 4): case ($minut >= 22 && $minut <= 24): case ($minut >= 32 && $minut <= 34): case ($minut >= 42 && $minut <= 44): case ($minut >= 52 && $minut <= 54): return "$minut minuty temu"; break; default: return "$minut minut temu"; break; } } $okres_wczoraj = $now-(60*60*24); $okres_przedwczoraj = $now-(60*60*24*2); if ($godzin > 0 && $godzin <= 6) { if ($godzin == 1) { return "Godzinę temu "; } else { if ($godzin >1 && $godzin<5) return "$godzin godziny temu"; if ($godzin >4)return "$godzin godzin temu"; } } else if (date("Y-m-d", $okres) == date("Y-m-d", $now)) { return "Dzisiaj".$ending_time; } else if (date("Y-m-d", $okres_wczoraj) == date("Y-m-d", $okres)) { return "Wczoraj".$ending_time; } else if (date("Y-m-d", $okres_przedwczoraj) == date("Y-m-d", $okres)) { return "Przedwczoraj".$ending_time; } if ($dni > 0 && $dni <= intval(date('t', $okres))) { switch($dni) { case ($dni < 7): return "$dni dni temu".$ending_date; break; case 7: return "Tydzień temu".$ending_date; break; case ($dni > 7 && $dni < 14): return "Ponad tydzień temu".$ending_date; break; case 14: return "Dwa tygodznie temu".$ending_date; break; case ($dni > 14 && $dni < 21): return "Ponad 2 tygodnie temu".$ending_date; break; case 21: return "3 tygodnie temu, ".date("Y-m-d", $okres); break; case ($dni > 21 && $dni < 28): return "Ponad 3 tygodnie temu".$ending_date; break; case ($dni >= 28 && $dni < 32): return "Miesiąc temu"; break; } } if ($miesiecy > 0 && $miesiecy <= 12) { switch($miesiecy) { case 1: return "Miesiąc temu".$ending_date; break; case 2: case 4: return "$miesiecy miesiące temu".$ending_date; break; case 3: return "Ćwierć roku temu".$ending_date; break; case 6: return "Pół roku temu".$ending_date; break; case 12: return "Roku temu".$ending_date; break; default: return "$miesiecy miesiecy temu".$ending_date; break; } } if ($lata > 0) { $lata1 = array("2", "3", "4"); $lata2 = array("0", "1", "5", "6", "7", "8", "9", "12", "13", "14"); if ($lata == 1) { return "Rok temu".$ending_date; } else if (in_array(substr("".$lata, -1), $lata2) || in_array(substr("".$lata, -2, 2), $lata2)) { return "$lata lat temu".$ending_date; } else if (in_array(substr((string)$lata, -1), $lata1)) { return "$lata lata temu".$ending_date; } } return date("Y-m-d", $okres); } ?>