Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]obliczanie ile upłynęło lat, miesięcy i dni od daty do dziś, obliczanie ile upłynęło lat, miesięcy i dni od daty do dziś
kecajs
post
Post #1





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

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


Witam,
bardzo proszę o pomoc w rozwiązaniu takiego tematu:
potrzebuję policzyć, ile minęło lat, miesięcy i dni licząc od dziś do daty wstecz, np: data bieżąca: 23-04-2010, data historyczna: 15-05-2007.

Próbowałem czegoś takiego:
  1. <code>
  2. <?php
  3. $d1 = strtotime('2007-05-15');
  4. $d2 = time();
  5.  
  6. $y1 = date('Y', $d1);
  7. $y2 = date('Y', $d2);
  8. $m1 = date('n', $d1);
  9. $m2 = date('n', $d2);
  10. $da1 = date('d', $d1);
  11. $da2 = date('d', $d2);
  12.  
  13. $year_diff = $y2 - $y1;
  14. $month_diff = $m2 - $m1;
  15. $days_diff = $y2 - $y1;
  16.  
  17. echo $year_diff. " lat, " .$month_diff. " miesięcy, " .$days_diff. " dni";
  18.  
  19. ?>
  20. </code>

jednak tu jest problem, że skrypt ten liczy niejako osobno, tj. najpierw odejmuje lata, następnie miesiące i na końcu dni - i w sumie wychodzą bzdury, a do tego z wartościami ujemnymi.

Bardzo proszę o pomoc.

Pozdrawiam,
Jacek

Ten post edytował kecajs 23.04.2010, 22:50:19
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
kefirek
post
Post #2





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


  1. $mktime = mktime (0,0,0,05,15,2007);
  2.  
  3. $unix = time() - $mktime;
  4.  
  5. $day = floor($unix / (60*60*24));
  6. $year = floor($unix / (365 * 24 * 60 * 60));
  7.  
  8. echo 'Dni: '. $day . ' Lat: ' . $year;
Go to the top of the page
+Quote Post
kecajs
post
Post #3





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

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


Cytat(kefirek @ 26.04.2010, 20:08:40 ) *
  1. $mktime = mktime (0,0,0,05,15,2007);
  2.  
  3. $unix = time() - $mktime;
  4.  
  5. $day = floor($unix / (60*60*24));
  6. $year = floor($unix / (365 * 24 * 60 * 60));
  7.  
  8. echo 'Dni: '. $day . ' Lat: ' . $year;

Kurczę, wyszło Dni: 1077, Lat: 2. Coś jest nie tak... (IMG:style_emoticons/default/sad.gif)

Pozdrawiam,
Jacek
Go to the top of the page
+Quote Post
kefirek
post
Post #4





Grupa: Zarejestrowani
Postów: 781
Pomógł: 256
Dołączył: 29.06.2008

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


Cytat(kecajs @ 26.04.2010, 20:42:30 ) *
Kurczę, wyszło Dni: 1077, Lat: 2. Coś jest nie tak... (IMG:style_emoticons/default/sad.gif)

Pozdrawiam,
Jacek


Ile według ciebie powinno wyjść ?
Go to the top of the page
+Quote Post
kecajs
post
Post #5





Grupa: Zarejestrowani
Postów: 54
Pomógł: 0
Dołączył: 23.04.2010

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


Cytat(kefirek @ 26.04.2010, 21:11:40 ) *
Ile według ciebie powinno wyjść ?


Lat: 2 - ok,
Miesiące: 11,
Dni: 19

Zależy mi właśnie na takich informacjach - dni, miesiące i lata.

Pozdrawiam,
Jacek

Trafiłem na taki skrypt:
  1.  
  2. <?php
  3. function CalcDiff($currTime, $origTime)
  4. {
  5. $showDiff = '';
  6.  
  7. // Set times
  8. $currTime = intval($currTime);
  9. $origTime = intval($origTime);
  10. if ($currTime<$origTime) { $diff = $origTime-$currTime; }
  11. else { $diff = $currTime-$origTime; }
  12.  
  13. // Start Years
  14. $yrs = floor($diff/31556926); // 31556926 secs/yr
  15. if ($yrs > 0)
  16. {
  17. $diff = $diff - ($yrs*31556926);
  18. $showDiff .= "{$yrs}";
  19. $showDiff .= 1<$yrs && $yrs<3 ? ' lata ' : '';
  20. $showDiff .= $yrs>2 ? ' lat ' : '';
  21. $showDiff .= $yrs<2 ? ' rok ' : '';
  22. }
  23. unset($yrs); // End Years
  24.  
  25. // Start Months
  26. $mos = floor($diff/2629743.83); // 2629743.83 secs/mo
  27. if ($mos > 0)
  28. {
  29. $diff = $diff - ($mos*2629743.83);
  30. $showDiff .= empty($showDiff) ? '' : ', ';
  31. $showDiff .= "{$mos}";
  32. $showDiff .= 1<$mos && $mos<5 ? ' miesiące ' : '';
  33. $showDiff .= $mos>4 ? ' miesięcy ' : '';
  34. $showDiff .= $mos<2 ? ' miesiąc ' : '';
  35. }
  36. unset($mos); // End Months
  37.  
  38. // Start Weeks
  39. $wks = floor($diff/604800); // 604800 secs/wk
  40. if ($wks > 0)
  41. {
  42. $diff = $diff - ($wks*604800);
  43. $showDiff .= empty($showDiff) ? '' : ', ';
  44. $showDiff .= "{$wks}";
  45. $showDiff .= 1<$wks && $wks<5 ? ' tygodnie ' : '';
  46. $showDiff .= $wks>4 ? ' tygodni ' : '';
  47. $showDiff .= $wks<2 ? ' tydzień ' : '';
  48. }
  49. unset($wks); // End Weeks
  50.  
  51. // Start Days
  52. $days = floor($diff/86400); // 86400 secs/day
  53. if ($days > 0)
  54. {
  55. $diff = $diff - ($days*86400);
  56. $showDiff .= empty($showDiff) ? '' : ', ';
  57. $showDiff .= "{$days}";
  58. $showDiff .= $days>1 ? ' dni ' : '';
  59. $showDiff .= $days<2 ? ' dzień ' : '';
  60. }
  61. unset($days); // End Days
  62.  
  63.  
  64. unset($diff); // Free unused memory
  65.  
  66. // Zwraca różnice
  67. if ($currTime<$origTime) { $showDiff = "- {$showDiff}"; }
  68. return $showDiff;
  69. }
  70.  
  71. // Przykład *******************************************************************
  72. $od = strtotime(date('2007-05-15')); // pobieramy czas w formie zwracanej przez funkcję strtotime
  73. $do = strtotime(date("Y-m-d"));
  74.  
  75. echo CalcDiff($do,$od); // wyświetlamy różnice date ;]
  76. ?>

jest OK, ale może zbyt rozbudowany.
W jaki sposób mogę zsumować wyniki kilku funkcji CalcDiff? Przykładowo mam
  1. $od1 = strtotime(date('2007-05-15')); $do1 = strtotime(date("Y-m-d"));
  2. $od2 = strtotime(date('2004-02-14')); $do2 = strtotime(date("2005-05-31"));
  3. $od3 = strtotime(date('2002-05-01')); $do3 = strtotime(date("2003-12-31"));

i chodzi o to, aby funkcja echo pokazała sumę powyższych różnic.

Pozdrawiam,
JAcek

Ten post edytował kecajs 27.04.2010, 21:37:04
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: 16.06.2026 - 07:44