Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Zamiana liczby dni na rok
Forum PHP.pl > Forum > Przedszkole
tomsi
Mam skrypt, który oblicza mi liczbę dni od podanej daty do dnia dzisiejszego. Wynik mam w dniach. A cchiałem to zamienić, żeby nie było 732 dni tylko 2 lata i 2 dni. No niby wystarczy zrobić w kodzie *365, ale co z rozróżnianiem lat przestępnych?
piotrooo89
ja bym sprawdzał czy rok był przestępny

  1. <?php
  2. date('L');
  3. ?>


i później jakiś if i liczysz.
tomsi
A jak sprawdzidzać wszystkie lata np. od 1980 roku?
piotrooo89
ja bym sprawdzał po kolei dopóki się nie natknę a później dodawał 4 do poprzedniego. kombinacje jak nie wiem.
tomsi
NO dobra to jest oczywiste i jak natrafię na taki rok to jak sprawdzić tym
  1. <?php
  2. date('L');
  3. ?>
? Bo to pobiera tlyko aktualną datę. Dobrze rozumiem?
MateuszS
Pokaż może ten skrypt, to go przerobimy żeby uwzględniał lata przestępne
tomsi
No mogę pokazać, ale nie wiem w czym to pomoże w przeliczeniu dni na lata...

  1. <?php
  2. $miesiac_2="12";
  3. $dzien_2="28";
  4. $rok_2="2008";
  5.  
  6.  
  7. $dzis_dzien = date("d");
  8. $dzis_miesiac = date("m");
  9. $dzis_rok = date ("Y");
  10.  
  11. $stara = mktime(0 ,0 , 0, $miesiac_2, $dzien_2, $rok_2);
  12. $dzis = mktime(0 ,0 , 0, $dzis_miesiac, $dzis_dzien, $dzis_rok);
  13.  
  14. $roznica = $dzis - $stara;
  15. $dni = floor($roznica / (24*60*60));
  16.  
  17.  
  18. echo $dni;
  19. ?>
flashdev
Warto zauważyć, że uwzględnienie lat przestępnych to nie tylko dodanie warunku typu (rok%4==0).
Co około 400 lat następuje przesunięcie roku przestępnego, dla wyrównania niedokładności.
phpcoder89
Cytat(flashdev @ 29.12.2008, 23:39:54 ) *
Warto zauważyć, że uwzględnienie lat przestępnych to nie tylko dodanie warunku typu (rok%4==0).
Co około 400 lat następuje przesunięcie roku przestępnego, dla wyrównania niedokładności.


teraz to dziala inaczej: http://pl.wikipedia.org/wiki/Sekunda_przest%C4%99pna
czyli jutro bedzie 3 2 1 1 0 ;P happy new year haha.gif
kefirek
  1. <?php
  2. $lat = floor($roznica / (365 * 24 * 60 * 60));
  3. ?>
tomsi
Cytat(kefirek @ 30.12.2008, 09:19:24 ) *
  1. <?php
  2. $lat = floor($roznica / (365 * 24 * 60 * 60));
  3. ?>


No tak to ja wiem, ale jak w tym uwzględnić i podzielić czy rok miał 365 czy 366 dni?
kefirek
Jak chcesz sprawdzić czy teraz mam rok przestępny
  1. <?php
  2. $rok=date('Y');
  3. if(!($rok%4)){
  4. // dodaj 1 daty
  5. }
  6. ?>
.radex
Cytat(phpcoder89 @ 30.12.2008, 08:40:14 ) *
teraz to dziala inaczej: http://pl.wikipedia.org/wiki/Sekunda_przest%C4%99pna
czyli jutro bedzie 3 2 1 1 0 ;P happy new year haha.gif


Yyy... nie... AFAIK rok jest przestępny gdy jest podzielny przez 4, ale nie jest podzielny przez 100, no chyba, że jest podzielny przez 400.
Vexator
czy zadowoli Cię pokazanie czegoś takiego?
  1. <?php
  2. $lat=date("Y", $roznica);
  3. $miesiecy=date("m", $roznica);
  4. $dni=date("d", $roznica);
  5. ?>
tomsi
Jednak skrypt pomimo tego, że mi się wydawało, że działa ok jednak niedokońca. Wydaje mi się, że teraz nie nie rozróżnia czy miesiąc ma 28, 29, 30 czy 31 dni.

  1. <?php
  2. $miesiac_2="12";
  3. $dzien_2="30";
  4. $rok_2="2003";
  5.  
  6.  
  7. $dzis_dzien = date("d");
  8. $dzis_miesiac = date("m");
  9. $dzis_rok = date ("Y");
  10.  
  11. $stara = mktime(0 ,0 , 0, $miesiac_2, $dzien_2, $rok_2);
  12. $dzis = mktime(0 ,0 , 0, $dzis_miesiac, $dzis_dzien, $dzis_rok);
  13.  
  14. $roznica = $dzis - $stara;
  15. $dni = floor($roznica / (24*60*60));
  16.  
  17.  
  18. echo "Dni wszystkich: $dni";
  19.  
  20. $lat=date("Y", $roznica);
  21. $miesiecy=date("m", $roznica);
  22. $dni=date("d", $roznica);
  23.  
  24. $lat = $lat - 1970;
  25. $miesiecy = $miesiecy - 1;
  26. $dni = $dni -1;
  27.  
  28. echo "<br>";
  29. echo "Lat: $lat";
  30. echo "<br>";
  31. echo "Miesięcy: $miesiecy";
  32. echo "<br>";
  33. echo "Dni: $dni";
  34. ?>



jeśli wprowadzę datę 30-12-2008 jest ok, że dzisiaj, ale jeśli 28-07-2008 to okłamuje na 2 dni.
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.