To co zobaczyłem na RTM.com, a czego polską wersję pokazuję tu bardzo mi się spodobało.
Skoro jest sobota, i chcę w formularzu wpisać datę wydarzenia, które jest w czwartek, muszę się najpierw zastanowić, jaka data w czwartek. RTM.com daje możliwość wpisania "next monday", "next january" itp. Dopiero w razie nierozpoznania wprowadzonej daty prosi o poprawę. Mi się jeszcze takie nierozpoznanie nie trafiło.
Do rzeczy: poniższa funkcja przyjmuje dwa opcjonalne parametry:
1. $dateString - ciąg znaków na podstawie jakiego chcemy dostać datę
2. $dateFormat - jak sfrormatowana ma być podawana data (ciąg znaków poprawny dla funkcji date" title="Zobacz w manualu php" target="_manual)
Jeżeli żaden z parametrów nie jest podany, zwrócony będzie aktualny timestamp.
Jeżeli podany tylko pierwszy parametr, zwrócony będzie timestamp dla podanego ciągu lub info o błędzie
Jeżeli podane obydwa parametry, zwracany ciąg zostanie sformatowany zgodnie z parametrem $dateFormat.
Funkcja:
<?php function GetDateFor($dateString = null, $dateFormat = null) { } 'nastepny' => 'next', 'nastepna' => 'next', 'przyszly' => 'next', 'przyszla' => 'next', 'poprzedni' => 'last', 'poprzednia' => 'last', 'zeszly' => 'last', 'zeszla' => 'last', 'ostatni' => 'last', 'ostatnia' => 'last', 'teraz' => 'now', 'dzis' => 'today', 'dzisiaj' => 'today', 'jutro' => '+1 day', 'przedwczoraj' => '-2 days', 'przed wczoraj' => '-2 days', 'wczoraj' => '-1 day', 'po jutrze' => '+2 days', 'pojutrze' => '+2 days', 'tydzien' => 'week', 'dzien' => 'day', 'miesiac' => 'month', 'rok' => 'year', 'ten' => 'this', 'temu' => 'ago', 'dni' => 'days', 'miesiace' => 'months', 'miesiecy' => 'months', 'lata' => 'years', 'lat' => 'years', 'ta' => 'this', 'za' => '+', ); 'poniedzialek' => 'monday', 'wtorek' => 'tuesday', 'sroda' => 'wednesday', 'czwartek' => 'thursday', 'piatek' => 'friday', 'sobota' => 'saturday', 'niedziela' => 'sunday' ); 'styczen' => 'january', 'luty' => 'february', 'marzec' => 'march', 'kwiecien' => 'april', 'maj' => 'may', 'czerwiec' => 'june', 'lipiec' => 'july', 'sierpien' => 'august', 'wrzesien' => 'september', 'październik' => 'october', 'listopad' => 'november', 'grudzien' => 'december' ); 'godzina' => 'hour', 'godziny' => 'hours', 'godzine' => 'hour', 'minuty' => 'min', 'minuta' => 'min', 'minut' => 'min', 'sekunda' => 'sec', 'sekund' => 'sec', 'sekundy' => 'sec' ); 'jeden' => '1', 'dwa' => '2', 'trzy' => '3', 'cztery' => '4', 'piec' => '5', 'szesc' => '6', 'siedem' => '7', 'osiem' => '8', 'dziewiec' => '9', 'dziesiec' => '10' ); $letters = array( 'ą'=>'a','Ą'=>'a','ś'=>'s','Ś'=>'s','ż'=>'z','Ż'=>'z','ź'=>'z','Ź'=>'z','ę'=>'e','Ę'=>'e', 'ć'=>'c','Ć'=>'c','ń'=>'n','Ń'=>'n','ł'=>'l','Ł'=>'l','ó'=>'o','Ó'=>'o'); if ($date === -1) { return 'Niepoprawny formay daty! ('.$rString.')'; } } return $date; } ?>
Przykład użycia:
<?php 'następny tydzień', '2 lata temu', '7 miesięcy temu', 'przedwczoraj', 'za rok', 'za 4 minuty', 'za godzinę', 'za 10 minut', 'za 20 sekund', 'za trzy dni', 'za pięć lat', 'za 12 miesięcy'); { } ?>
wynik (dla czasu 01-12-2006 17:06:41):
Kod
dziś => 01-12-2006 17:06:41
jutro => 02-12-2006 17:06:41
pojutrze => 03-12-2006 17:06:41
wczoraj => 30-11-2006 17:06:41
przyszła sobota => 02-12-2006 00:00:00
następny wtorek => 05-12-2006 00:00:00
następny tydzień => 08-12-2006 17:06:41
2 lata temu => 01-12-2004 17:06:41
7 miesięcy temu => 01-05-2006 17:06:41
przedwczoraj => 29-11-2006 17:06:41
za rok => 01-12-2007 17:06:41
za 4 minuty => 01-12-2006 17:10:41
za godzinę => 01-12-2006 18:06:41
za 10 minut => 01-12-2006 17:16:41
za 20 sekund => 01-12-2006 17:07:01
za trzy dni => 04-12-2006 17:06:41
za pięć lat => 01-12-2011 17:06:41
za 12 miesięcy => 01-12-2007 17:06:41
jutro => 02-12-2006 17:06:41
pojutrze => 03-12-2006 17:06:41
wczoraj => 30-11-2006 17:06:41
przyszła sobota => 02-12-2006 00:00:00
następny wtorek => 05-12-2006 00:00:00
następny tydzień => 08-12-2006 17:06:41
2 lata temu => 01-12-2004 17:06:41
7 miesięcy temu => 01-05-2006 17:06:41
przedwczoraj => 29-11-2006 17:06:41
za rok => 01-12-2007 17:06:41
za 4 minuty => 01-12-2006 17:10:41
za godzinę => 01-12-2006 18:06:41
za 10 minut => 01-12-2006 17:16:41
za 20 sekund => 01-12-2006 17:07:01
za trzy dni => 04-12-2006 17:06:41
za pięć lat => 01-12-2011 17:06:41
za 12 miesięcy => 01-12-2007 17:06:41
Mam nadzieję, że komuś się przyda a wprowadzanie daty stanie się bardziej przyjazne :)
pozdr.