Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]funkcja obliczajaca wiek
pela222
post
Post #1





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Cześć,

mam taki plik:
  1. class Person
  2. {
  3. /**
  4.   * @var bool
  5.   */
  6. private $dob = '';
  7. private $age = '';
  8.  
  9. /**
  10.   * @param string $dob
  11.   */
  12. public function setDob($dob)
  13. {
  14. $this->dob = $dob;
  15. }
  16.  
  17. /**
  18.   * @return string
  19.   */
  20. public function getDob()
  21. {
  22. return $this->dob;
  23. }
  24. }


Chialem zbudować funkcje dla potrzeb oblczenia wieku osoby na podstawie daty urodznia. Kiedyś używałem czegoś na kształt poniżej ale nie potrafie tego użyć w strukturze funkcji / klas.

  1. public function setAge($age ){
  2. $now = new DateTime(); //dzisiejsza data
  3. //echo $now->format('Y-m-d');
  4. $date = new DateTime($dob); //format daty dla potrzeb obliczenia wieku osoby na podstawie dob
  5. //echo $dob1->format('Y-m-d');
  6. $this->age = $now->diff($date); //oblicz wiek...odwołąnie do wieku w formacie echo '.$age->y.'
  7. }
  8.  
  9.  
  10. public function getAge(){
  11. return $this->age;
  12. }


Dziekuje z góry za pomoc jak to zrobić.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
pela222
post
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 0
Dołączył: 17.04.2013

Ostrzeżenie: (0%)
-----


Dziękuje wszystkim za uwagi. Ostateczne rozwiązanie wyglada tak:
  1. class Person
  2. {
  3. private $dob = '';
  4. private $age = '';
  5.  
  6.  
  7. /**
  8.   * @param $dob
  9.   */
  10. public function setDob($dob)
  11. {
  12. $this->dob = $dob;
  13. $this->setAge(); //to dodałem aby obliczyć wiek
  14. }
  15. /**
  16.   * @return
  17.   */
  18. public function getDob()
  19. {
  20. return $this->dob;
  21. }
  22.  
  23. /**
  24.   * @param string $age
  25.   */
  26. public function setAge(){
  27. $now = new DateTime(); //dzisiejsza data
  28. //echo $now->format('Y-m-d');
  29. $date = new DateTime($this->dob); //format daty dla potrzeb obliczenia wieku osoby na podstawie dob
  30. //echo $dob1->format('Y-m-d');
  31. $interval = $now->diff($date);
  32. //EDIT nr2
  33. $this->years = $interval->y; //oblicz wiek...odwołąnie do wieku w formacie echo '.$age->y.'
  34. $this->months = $interval->m;
  35. $this->days = $interval->d;
  36. $this->age = $this->years .' Year(s)';
  37. //kiedy miesiace a kiedy lata
  38. if($this->years === 0) {
  39. $this->age = $this->months .' Month(s)';
  40. if($this->months === 0) {
  41. $this->age = $this->days .' Day(s)';
  42. }
  43. }
  44. }
  45. /**
  46.   * @return string
  47.   */
  48. public function getAge(){
  49. //EDIT nr1
  50. if (($this->age > 21 && ($this->age % 10 == "2" || $this->age % 10 == "3" || $this->age % 10 == "4")) || $this->age < 5) {
  51. $koncowka = "lata";
  52. } else {
  53. $koncowka = "lat";
  54. }
  55. return $this->age . ' ' . $koncowka;
  56. }
  57. }


Możliwe że bede chciał znaleść udoskonalenie tego obliczania.
1) Dla osoby gdzie wiek jest <0 żeby policzyć miesiące
2) wpisanie lat / lata np. 31 lat, 32 lata etc (gdzieś takie coś widziałem wiec może jutro poszukam i zobacze czy ogarniam temat (IMG:style_emoticons/default/smile.gif)

===EDIT nr1====
Punkt nr 2 już znalazłem i dodałem (IMG:style_emoticons/default/smile.gif) Happy hours (IMG:style_emoticons/default/smile.gif)

===EDIT nr2===
Zrobiłęm punkt nr1 czyli obliczanie miesiecy dla osoby o mniej niz 1 rok życia. I jest ok.

PYTANIE
Ale mam jeden problem. Jeśli mam osobę bez daty urodzenia to mi oblicza że ma 2015 lat. Gdzie jest problem.
Jak zwykle dziękuje za podpowiedzi.
Pozdrawiam.

Ten post edytował pela222 5.08.2015, 00:56:25
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 15.10.2025 - 20:13