Funkcja zamienia daty na poniższe wzorce:
DLA DAT PRZESZŁYCH
- minutę temu (jeśli czas jest krótszy niż 60 sekund),
- X minut temu (max. 59 minut temu),
- Dzisiaj, 20:59 (jeśli czas jest dłuższy niż 60 minut),
- Wczoraj, 20:59 (jeśli zmienił się dzień),
- Sobota, 20:59 (dla dat starszych niż ww. 'wczoraj', przypisywane są dni tygodnia, max. 6 dni do tyłu),
- 2013-02-03, 01:06:41 (dla dat starszych bądź równych tydzień).
DLA DAT PRZYSZŁYCH:
- Za minutę (jeśli czas do wydarzenia jest krótszy niż 60 sekund),
- Za X minut (max. 59 minut),
- Dzisiaj, 20:59 (jeśli czas do wydarzenia jest dłuższy niż 60 minut),
- Jutro, 20:59 (jeśli do czasu wydarzenia nastąpi zmiana dni),
- Sobota, 20:59 (dla dat bardziej odległych niż ww. 'jutro', przypisywane są dni tygodnia, max. 6 dni do przodu),
- 2013-02-03, 01:06:41 (dla dat równych bądź odległych od tygodnia [7 dni]).
Kod funkcji:
function create_friendly_date($timestamp) { /* langs past */ $lang['Minute_Ago'] = 'Minutę temu'; $lang['Minutes_Ago_2_4'] = '%s minuty temu'; $lang['Minutes_Ago_5_59'] = '%s minut temu'; $lang['Today'] = 'Dzisiaj, %s'; $lang['Yesterday'] = 'Wczoraj, %s'; $lang['Mon'] = 'Poniedziałek, %s'; $lang['Tue'] = 'Wtorek, %s'; $lang['Wed'] = 'Środa, %s'; $lang['Thu'] = 'Czwartek, %s'; $lang['Fri'] = 'Piątek, %s'; $lang['Sat'] = 'Sobota, %s'; $lang['Sun'] = 'Niedziela, %s'; /* langs future */ $lang['For_Minute'] = 'Za minutę'; $lang['For_Minutes_2_4'] = 'Za %s minuty'; $lang['For_Minutes_5_59'] = 'Za %s minut'; $lang['Tomorow'] = 'Jutro, %s'; $lang['Now'] = 'W tym momencie'; // można zmienić np. na 'Teraz' $same_day = ($day_time == $day_now) ? TRUE : FALSE; if ( $timestamp < 1 ) { return FALSE; } $past_or_future = ($now > $timestamp) ? TRUE : FALSE; if ( $now == $timestamp ) { return $lang['Now']; } else if ( $past_or_future ) { $maths = $now - $timestamp; $day_before = $day_now-$day_time; if ( $same_day && $maths <= 60 ) { return $lang['Minute_Ago']; } else if ( $same_day && $maths > 60 && $maths <= 240 ) { } else if ( $same_day && $maths > 240 && $maths <= 3540 ) { { } else { } } else if ( $same_day && $maths > 3540 ) { } else if ( !$same_day && $day_before == 1 ) { } else if ( !$same_day && $day_before > 1 && $day_before < 7 ) { if ( $day_before == 2 ) { } else if ( $day_before == 3 ) { } else if ( $day_before == 4 ) { } else if ( $day_before == 5 ) { } else if ( $day_before == 6 ) { } } else { } } else { $maths = $timestamp - $now; $day_after = $day_time-$day_now; if ( $same_day && $maths <= 60 ) { return $lang['For_Minute']; } else if ( $same_day && $maths > 60 && $maths <= 240 ) { } else if ( $same_day && $maths > 240 && $maths <= 3540 ) { { } else { } } else if ( $same_day && $maths > 3540 ) { } else if ( !$same_day && $day_after == 1 ) { } else if ( !$same_day && $day_after > 1 && $day_after < 7 ) { if ( $day_after == 2 ) { } else if ( $day_after == 3 ) { } else if ( $day_after == 4 ) { } else if ( $day_after == 5 ) { } else if ( $day_after == 6 ) { } } else { } } }
Testowałem i problemów nie było, w razie jakby ktoś zauważył jakiś błąd to prosiłbym o info - poprawię

Co do używania to wiadomo, datę podajemy w formacie timestamp, przykład użycia:
Z dniem wysłania tego posta, funkcja zwraca: Poniedziałek 00:03.
Jeśli podano błędny argument w funkcji, zwrócona zostanie wartość FALSE.