Class modify date and time
- Szczegóły
- Kategoria: Class
- Opublikowano: sobota, 03, styczeń 2015 14:23
- Super User
- Odsłony: 10568
Potrzebowałem klasy do obsługi czasu w PHP więc ją wykonałem.
Od jakiegoś czasu zajmowałem się projektem z dużą ilością danych zapisywanych w dwóch formatach do bazy danych i jeszcze parę innych, jak można tak napisać. Jeden unixsowy, a drugi mysql (tradycyjny). Ciągłe zmienianie się zapisów do bazy danych, a to w jednym formacie, a to w drugim doprowadzało mnie do pi…pi…pi. Postanowiłem zrobić klasę, która te wszystkie rzeczy będzie miała w sobie i będzie obsługiwać nie tylko konwersję pomiędzy formatami, ale także jeszcze wyświetlała całą datę z polskimi dniami jak też z polskimi miesiącami. Ponadto potrzebowałem modyfikowania tej daty albo dodawanie albo odejmowanie dni miesięcy lat, a także czasu godzin, sekund, minut. Tak właśnie powstała klasa którą nazwałem modify_date_and_time czyli modyfikuj datę i czas. Myślę że nie jednemu z was się przyda do pracy, albo do zabawy.
Wywołanie banalnie proste określamy datę i potem używamy tych metod które są nam potrzebne np. żeby przekonwertować datę na czas unixsowy wystarczy taki kawałek kodu:
$KK = new modify_date_and_time(); $KK->set_dates('2015-01-03 08:09:11'); ## czas mysql zmienia na uniksowy ## echo $KK->format_unix().' '; ## czas uniksowy zmienia na mysql ## $unix = new modify_date_and_time(); $unix->set_dates('1420268951'); echo ' '.$unix->format_mysql().' ';
Jeżeli natomiast chcemy całą datę z polskimi miesiącami to tak:
$KK = new modify_date_and_time(); $KK->set_dates('2015-01-03 08:09:11'); ## Cała data z nazwami dni i miesięcy ## echo $KK->data_all($cale_nazwy=1).' ';
Możemy wyświetlać zmodyfikowaną całą datę jak też pojedyńcze wartości zmodyfikowane jak i nie zmienione.
Klasa pozwala zrobić odlicznie od data-poczatek do data-koniec pokazuje ile pozostało lat, miesięcy, tygodni i dni.
Całość co potrafi klasa poniżej.
modify_date_and_time.php
/** * PHP 5.1 * @version v1 modify_date_and_time * @license Apache License, Version 2.0. * @author Adam Berger <ber34#o2.pl> * @Site www.joomla-cms.com.pl */ Class modify_date_and_time{ private $years; private $month; private $day; private $hour; private $minutes; private $seconds; private $data_czas; public function __construct(){ $this->dates= new DateTime(); } public function data_day($plu_min, $day){ $this->dates->modify( $plu_min.$day.' day' ); return $this->dates->format('d'); } public function data_month($plu_min, $month){ $this->dates->modify( $plu_min.$month.' month'); return $this->dates->format('m'); } public function data_year($plu_min,$year){ $this->dates->modify( $plu_min.$year.' years' ); return $this->dates->format('Y'); } public function time_hour($plu_min, $hour){ $this->dates->modify( $plu_min.$hour.' hour' ); // return date('G', strtotime($plu_min.$hour.' hour')); return $this->dates->format('G'); } public function time_minute($plu_min, $minutes){ $this->dates->modify( $plu_min.$minutes.' minutes'); return $this->dates->format('i'); } public function time_seconds($plu_min, $seconds){ $this->dates->modify( $plu_min.$seconds.' seconds' ); return $this->dates->format('s'); } public function set_dates($praca){ $this->format = $praca; $jj = preg_split('/[-: ]/', $this->format); if(!empty($jj[2])){ $this->years =$jj[0]; $this->month =$jj[1]; $this->day =$jj[2]; } if(!empty($jj[3])){ $this->hour = $jj[3]; $this->minutes =$jj[4]; $this->seconds =$jj[5]; } } public function format_mysql(){ ## format MySQL ## return date('Y-m-d H:i:s', $this->format); } public function format_unix(){ ## format unixsowy ## return strtotime($this->format); } public function get_years(){ return $this->years; } public function get_month(){ return $this->month; } public function get_day(){ return $this->day; } public function get_hour(){ return $this->hour; } public function get_minutes(){ return $this->minutes; } public function get_seconds(){ return $this->seconds; } public function data_modifi(){ return $this->dates->setDate($this->years, $this->month, $this->day); } public function time_modifi(){ return $this->dates->setTime($this->hour, $this->minutes, $this->seconds); } ## data mysql 2015-01-03 08:09:11 ## ## parametr nazwy skrócone czy czałe ## public function data_all($cale_nazwy=1){ if($cale_nazwy === 1){ $dni = array('niedziela','poniedziałek','wtorek','sroda','czwartek','piątek','sobota'); $miesiace = array(1 => 'styczeń',2 => 'luty',3 => 'marzec',4 => 'kwiecień',5 => 'maj',6 => 'czerwiec',7 => 'lipiec', 8 => 'sierpień',9 => 'wrzesień',10 => 'październik',11 => 'listopad',12 => 'grudzień'); }else{ $dni = array('nie','pon','wto','sro','czw','pią','sob'); $miesiace = array(1 => 'sty',2 => 'lut',3 => 'mar',4 => 'kwi',5 => 'maj',6 => 'cze',7 => 'lip', 8 => 'sie',9 => 'wrz',10 => 'paź',11 => 'lis',12 => 'gru'); } $czas = ' '.$dni[$this->dates->format('w')]; $czas.= ' '.$this->dates->format('d'); $czas.= ' '.$miesiace[$this->dates->format('n')]; $czas.= ' '.$this->dates->format('Y'); return $czas .= ' r. Godzina '.$this->dates->format('H:i:s'); } ## sprawdzamy ile dni pozostało ## ## $param może być 1 albo 2 albo albo 3 albo 123 albo 12 albo 13 albo 23 ## Jeżeli data end jest pusta to liczy do obecnego czasu ## public function set_date_start_end($param, $data_end){ $data_end = strtotime($data_end); if(in_array(1,$param)){ $zostalo_dni = ' Dni '.floor(($data_end - $this->format_unix())/ 86400); }else{$zostalo_dni=null;} if(in_array(2,$param)){ $zostalo_tygodni = ' Tygodni '.floor(($data_end - $this->format_unix())/ 604800); }else{$zostalo_tygodni=null;} if(in_array(3,$param)){ $zostalo_miesiecy = ' Miesięcy '.floor(($data_end - $this->format_unix())/ 2592000); }else{$zostalo_miesiecy=null;} if(in_array(4,$param)){ $zostalo_lat =' Lat '.floor(($data_end - $this->format_unix())/ 31104000); }else{$zostalo_lat=null;} $this->data_czas = 'Pozostało '. $zostalo_dni.$zostalo_tygodni.$zostalo_miesiecy.$zostalo_lat; } public function set_date_time_start_end($param, $data_end){ $data_end = new DateTime($data_end); $diff = $this->dates->diff($data_end); if(in_array(1,$param)){ $zostalo_dni = ' Dni '.floor($diff->format("%d")); }else{$zostalo_dni=null;} if(in_array(2,$param)){ $zostalo_tygodni = ' Tygodni '.floor(strtotime($diff->format("%Y-%m-%d"))/604800); }else{$zostalo_tygodni=null;} if(in_array(3,$param)){ $zostalo_miesiecy = ' Miesięcy '.floor($diff->format("%m")); }else{$zostalo_miesiecy=null;} if(in_array(4,$param)){ $zostalo_lat =' Lat '.floor($diff->format("%Y")); }else{$zostalo_lat=null;} if(in_array(5,$param)){ $zostalo_godzn =' Godzin '.floor($diff->format("%H")); }else{$zostalo_godzn=null;} if(in_array(6,$param)){ $zostalo_minut =' Minut '.floor($diff->format("%i")); }else{$zostalo_minut=null;} if(in_array(7,$param)){ $zostalo_sekund =' Sekund '.floor($diff->format("%s")); }else{$zostalo_sekund=null;} //$this->data_time_czas = $diff->format("%Y-%m-%d %H:%I:%S"); $this->data_time_czas = 'Pozostało '. $zostalo_dni.$zostalo_tygodni.$zostalo_miesiecy.$zostalo_lat.$zostalo_godzn.$zostalo_minut.$zostalo_sekund; } public function get_date_time_start_end(){ return $this->data_time_czas; } public function get_date_start_end(){ return $this->data_czas; } }
index.php
$KK = new modify_date_and_time(); ## czas start normalny ## $KK->set_dates('2015-01-03 08:09:11'); ## Co pokazać 1 = dni 2 = tygodnie 3 = Miesiące 4 = lata ## $param=array(1,2,3,4,5,6,7); ## czas koniec## $KK->set_date_start_end($param, '2018-01-03 08:09:11'); echo $KK->get_date_start_end().' '; ## Cała data i czas ## $KK->set_date_time_start_end($param, '2018-01-03 08:09:11'); echo $KK->get_date_time_start_end().' '; ## Rok nie zmodyfikowany ## echo $KK->get_years().' '; ## Miesuiąc nie zmodyfikowany ## echo $KK->get_month().' '; ## Dzień nie zmodyfikowany ## echo $KK->get_day().' '; ##Godzina nie zmodyfikowana ## echo $KK->get_hour().' '; ## Minuty nie zmodyfikowane ## echo $KK->get_minutes().' '; ## Sekundy nie zmodyfikowane ## echo $KK->get_seconds().' '; ## Cała data z nazwami dni i miesięcy ## echo $KK->data_all($cale_nazwy=1).' '; ## czas mysql zmienia na uniksowy ## echo $KK->format_unix().' '; ## Date ## $KK->data_modifi(); $year=8; $month=2; $day =19; echo $KK->data_year('-', $year); echo $KK->data_month('+', $month); echo $KK->data_day('-', $day); ## time ## $KK->time_modifi(); $hour=10; $minute=5; $seconds= 10; echo $KK->time_hour('+', $hour); echo $KK->time_minute('-', $minute); echo $KK->time_seconds('+', $seconds); ## czas uniksowy zmienia na mysql ## $unix = new modify_date_and_time(); $unix->set_dates('1420268951'); echo ' '.($unix->format_mysql()).' ';
A to efekt końcowy: