Dla własnych potrzeb, napisałem funkcję, która zamieni sztywne daty, typu: YYYY-mm-dd, H:m:i na coś ciekawszego.
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'
$timestamp = intval($timestamp); $day_time = floor($timestamp/86400
); $timedate = date("H:i", $timestamp); $day_now = floor($now/86400
); $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 )
{
return sprintf($lang['Minutes_Ago_2_4'], $ret); }
else if ( $same_day && $maths > 240 && $maths <= 3540 )
{
{
return sprintf($lang['Minutes_Ago_2_4'], $ret); }
else
{
return sprintf($lang['Minutes_Ago_5_59'], $ret); }
}
else if ( $same_day && $maths > 3540 )
{
return sprintf($lang['Today'], $timedate); }
else if ( !$same_day && $day_before == 1 )
{
return sprintf($lang['Yesterday'], $timedate); }
else if ( !$same_day && $day_before > 1 && $day_before < 7 )
{
if ( $day_before == 2 )
{
return sprintf($lang[date("D", ($now-172800
))], $timedate); }
else if ( $day_before == 3 )
{
return sprintf($lang[date("D", ($now-259200
))], $timedate); }
else if ( $day_before == 4 )
{
return sprintf($lang[date("D", ($now-345600
))], $timedate); }
else if ( $day_before == 5 )
{
return sprintf($lang[date("D", ($now-432000
))], $timedate); }
else if ( $day_before == 6 )
{
return sprintf($lang[date("D", ($now-518400
))], $timedate); }
}
else
{
return date("Y-m-d, H:i", $timestamp); }
}
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 )
{
return sprintf($lang['For_Minutes_2_4'], $ret); }
else if ( $same_day && $maths > 240 && $maths <= 3540 )
{
{
return sprintf($lang['For_Minutes_2_4'], $ret); }
else
{
return sprintf($lang['For_Minutes_5_59'], $ret); }
}
else if ( $same_day && $maths > 3540 )
{
return sprintf($lang['Today'], $timedate); }
else if ( !$same_day && $day_after == 1 )
{
return sprintf($lang['Tomorow'], $timedate); }
else if ( !$same_day && $day_after > 1 && $day_after < 7 )
{
if ( $day_after == 2 )
{
return sprintf($lang[date("D", ($now+172800
))], $timedate); }
else if ( $day_after == 3 )
{
return sprintf($lang[date("D", ($now+259200
))], $timedate); }
else if ( $day_after == 4 )
{
return sprintf($lang[date("D", ($now+345600
))], $timedate); }
else if ( $day_after == 5 )
{
return sprintf($lang[date("D", ($now+432000
))], $timedate); }
else if ( $day_after == 6 )
{
return sprintf($lang[date("D", ($now+518400
))], $timedate); }
}
else
{
return date("Y-m-d, H:i", $timestamp); }
}
}
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:
echo create_friendly_date
('1359327794');
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.
Ten post edytował Michael2318 3.02.2013, 12:29:21