[PHP] Wyświetlanie daty w formacie: Godzinę temu, Przedwczoraj, Tydzień temu, Miesiąc temu itp.

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); 
}
?>
PHP | TAG: |

Jedna odpowiedź na „[PHP] Wyświetlanie daty w formacie: Godzinę temu, Przedwczoraj, Tydzień temu, Miesiąc temu itp.

  1. Fajny skrypt, dzięki:) Jest literówka przy „tygodznie”. Szkoda, że nie jest lepiej opisany. W piewszym momencie nie wiadomo po co jest $ending_time..

Dodaj komentarz