Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [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 23.04.2010, 21:17:02
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
blooregard
post 23.04.2010, 21:33:39
Post #2


Newsman


Grupa: Moderatorzy
Postów: 2 033
Pomógł: 290
Dołączył: 21.12.2007
Skąd: Łódź




Proszę dodać BBCode.

Zainteresuj się time(), date(), mktime()
Powód edycji: [blooregard]:


--------------------
Life's simple... You make choices and don't look back...
Go to the top of the page
+Quote Post
micha12344
post 23.04.2010, 22:03:02
Post #3





Grupa: Zarejestrowani
Postów: 79
Pomógł: 3
Dołączył: 16.01.2009
Skąd: lubelskie

Ostrzeżenie: (10%)
X----


to chyba bedzie jakos tak

  1. $przeszla = mktime (18, 39, 33, 2, 22, 2000); // godzina, minuta, sekunda, miesiac, dzien, rok
  2.  
  3. $date = strtotime(date("Y-m-d H:i:s"));
  4.  
  5. $dobra = $date - $przeszla;
  6. $dni = date('z', $dobra);


Ten post edytował micha12344 23.04.2010, 22:04:12
Go to the top of the page
+Quote Post
kecajs
post 26.04.2010, 16:54:24
Post #4





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

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


Cytat(micha12344 @ 23.04.2010, 23:03:02 ) *
to chyba bedzie jakos tak

  1. $przeszla = mktime (18, 39, 33, 2, 22, 2000); // godzina, minuta, sekunda, miesiac, dzien, rok
  2.  
  3. $date = strtotime(date("Y-m-d H:i:s"));
  4.  
  5. $dobra = $date - $przeszla;
  6. $dni = date('z', $dobra);


A jak to ma działać? Tj. pokaże mi wynik w postaci lat, miesięcy i dni? Czas mi jest niepotrzebny, dlatego niech go w ogóle nie będzie.
Dodam jeszcze, że data historyczna będzie niezmienna, tj. na stałe wpisana do skryptu.
Bardzo proszę o dalszą pomoc.

Pozdrawiam,
Jacek

Cytat(blooregard @ 23.04.2010, 22:33:39 ) *
Proszę dodać BBCode.

OK, już poprawiłem - przepraszam

Zainteresuj się time(), date(), mktime()

a może coś bliże? Poczytałem trochę na temat podanych funkcji, jednak nie jestem w stanie nic sensownego sklecić sad.gif


Może jeszcze jakaś podpowiedź smile.gif


Cytat(blooregard @ 23.04.2010, 22:33:39 ) *
Proszę dodać BBCode.

Już poprawiłem - przepraszam za niedopatrzenie

Zainteresuj się time(), date(), mktime()

A coś bliżej? Przejrzałem te funkcje, ale nie potrafię sklecić czegoś sensownego.


Bardzo proszę o dalsze wskazówki.

Pozdrawiam,
Jacek

Bardzo proszę o pomoc - jest to dla mnie ważne, a nie mogę sobie sam poradzić - dla Was to chyba nie jest zbyt skomplikowany temat? A może jest to nie do wykonania? W takim razie proszę o pomoc w rozwiązaniu tematu w sposób możliwy do realizacji i najbliższy założeniom.

Pozdrawiam,
Jacek
Go to the top of the page
+Quote Post
kefirek
post 26.04.2010, 19:08:40
Post #5





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 26.04.2010, 19:42:30
Post #6





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... sad.gif

Pozdrawiam,
Jacek
Go to the top of the page
+Quote Post
kefirek
post 26.04.2010, 20:11:40
Post #7





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... sad.gif

Pozdrawiam,
Jacek


Ile według ciebie powinno wyjść ?
Go to the top of the page
+Quote Post
kecajs
post 27.04.2010, 21:29:38
Post #8





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
Wicepsik
post 27.04.2010, 21:40:11
Post #9





Grupa: Zarejestrowani
Postów: 1 575
Pomógł: 299
Dołączył: 26.03.2009

Ostrzeżenie: (20%)
X----


http://forum.php.pl/index.php?s=&showt...st&p=596192

Ten post edytował Wicepsik 27.04.2010, 21:41:52


--------------------
Go to the top of the page
+Quote Post
kecajs
post 28.04.2010, 22:47:38
Post #10





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

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


Cytat(Wicepsik @ 27.04.2010, 22:40:11 ) *


Ale tam nie ma odpowiedzi na moje pytanie.
Może zadam je inaczej:
mam kilka funkcji liczących ile lat, miesięcy i dni upłynęło od daty historycznej do daty bieżącej i muszę zsumować te okresy. W jaki sposób??

Jacek
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 26.04.2024 - 23:03