Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: roznice miedzy datami okreslic w procentach
Forum PHP.pl > Forum > PHP
wassago
mam taki maly problem, wlasciwie to mam jakies zacmienie polmroczne bo nawet nie wiem jak do tego sie zabrac. Mamy sobie dwie daty w "Ymd" np. 20040610 i 20040621. teraz potrzebuje roznice, czyli 11 dni przerobic aby skrypt wskazywal mi 100(%), kazda inna data odpowiednia ilosc procent np dzien 1 to bedzie ok 8.5(%). Dodam, ze daty moga sie zmieniac, wazne aby pelna roznica miedzy datami to bylo 100(%).

jakies pomysly?
stoprocent
Moze similar_text()" title="Zobacz w manualu PHP" target="_manual ?
mazy
ale chodzi o to ze 11 dni to jest 100%? bo jesli tak to wystarczy obliczyć róznice w dniach a następnie ze wzoru dzień/11*100 obliczyć procent a jeśli inaczej to trzeba te 11 zmienc:D
party
Dużo łatwiej byłoby gdybyś czas zapisywał poprzez f-cje time" title="Zobacz w manualu PHP" target="_manual();. 11 dni to byłoby 60 * 60 * 24 * 11, czyli 950400 sekund. Twój wzór na obliczenie procentów byłby następujący: różnica / 950400 * 100.
hwao
Jakbys tu "Ymd" mial chociarz krobpi to explode i bys mial do mktime i tak jak mówi mój Snajper smile.gif

---

Chyba ze nie xplode tylko tym http://pl2.php.net/manual/pl/function.substr.php
Bo masz dane tazwsze tak samo formatowana smile.gif i rok dzien i miesiac zdobedziesz bez problemu smile.gif
wassago
dodam tyle, ze u mnie z matematyka jest gorzej niz zle - wiec gdybyscie mogli podac kawalek gotowego kodu to bylbym bardzi wdzieczny winksmiley.jpg
DeyV
  1. <?php
  2. $sData1 = &#092;"20041204\";
  3. $sData2 = &#092;"20041208\";
  4.  
  5. $iData1 = prepareDate( $sData1 );
  6. $iData2 = prepareDate( $sData2 );
  7.  
  8. $iRoznica = abs( $iData1 - $iData2 );
  9. $iIloscDni = iloscDni( $iRoznica );
  10.  
  11.  
  12. echo ' ' . date (&#092;"d-m-Y\", prepareDate( $sData1 ) );
  13. echo ' ' . date (&#092;"d-m-Y\", prepareDate( $sData2 ) );
  14.  
  15.  
  16. echo ' ilosc dni: '. $iIloscDni;
  17.  
  18.  
  19. /*** jeden dzień to .. procent ****/
  20.  
  21. $fIleProcent = 1/$iIloscDni *100;
  22.  
  23. echo '<br /> jeden dzień to: ' .$fIleProcent . '% <br />';
  24.  
  25.  
  26. /*** x dni to .. procent ****/
  27. $iIleDni = 5;
  28. echo $iIleDni .' dni to: ' .$fIleProcent * $iIleDni. '% ';
  29.  
  30.  
  31.  
  32.  
  33.  
  34. /**
  35.  * @param string date YYYYMMDD
  36.  * @return int unixtime
  37.  */
  38. function prepareDate( $sDate )
  39. {
  40. $sDate = trim( $sDate );
  41.  
  42. $iYear = (int) substr( $sDate , 0, 4 ); 
  43. $iMounth = (int) substr( $sDate , 4, 2 ); 
  44. $iDay = (int) substr( $sDate , 6, 2 ); 
  45.  
  46. return mktime ( 0, 0, 0, $iMounth, $iDay, $iYear );  
  47. }
  48.  
  49. /**
  50.  * oblica, ile to dni
  51.  * @param int Ilośc sekund 
  52.  * @return int Ilośc dni
  53.  */
  54. function iloscDni( $iIloscSek )
  55. {
  56. if( $iIloscSek <=)
  57. {
  58. return 0;
  59. }
  60.  
  61. $iIloscDni = (int) $iIloscSek / ( 24*60*60);
  62.  
  63.  
  64. return $iIloscDni++; //niepełna doba jest traktowana jako cały dzien
  65. }
  66. ?>



ps. czas na powtórkę z 4 klasy podstawówki winksmiley.jpg
wassago
dzieki DeyV, na zjezdzie masz u mnie juz drugie piwo winksmiley.jpg co do tej matmy to uwiezcie mi, ze mi wstyd ale tak wyszlo tongue.gif
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.