Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Obliczenie czy od podanej daty minął więcej niż rok czy mniej niż rok
Elber
post
Post #1





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Witam,

mam problem smile.gif Główkuję tutaj (może za bardzo), aby obliczyć czy od dziś do podanej daty minie równy rok, mniej niż rok czy więcej...wszystko byłoby spoko gdyby nie rok przestępny...bo tego nie umiem rozgryźć, bo biorąc sztywno że rok ma 365 dni, odejmując do daty 30 maja 2012 - datę 8 marca 2012 obliczamy ilość dni i możemy zrobić prostego IF'a dzieląc wynik przez 365 i jak wynik < 1 to znaczy że nie cały rok minie...jak wynik == 1 to znaczy ze rok, jak wynik > 1 to więcej niż rok...a co z przestępnością ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 17)
peter13135
post
Post #2





Grupa: Zarejestrowani
Postów: 1 447
Pomógł: 191
Dołączył: 26.03.2008

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


http://www.php.net/strtotime

Dodajesz rok i porównujesz biggrin.gif


--------------------
:)
Go to the top of the page
+Quote Post
Elber
post
Post #3





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


cały czas zamieniam datę na strtotime i wtedy odejmuje ... ale nie rozumiem dodajesz rok i porównujesz ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
irmidjusz
post
Post #4





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


Może ułatw sobie życie i nie sprawdzaj, czy minie rok, ale czy minie założona, stała liczba dni, np. 365? biggrin.gif
Czyli chodzi mi o to, czy aby na pewno potrzebne Ci nieprecyzyjne pojęcie roku?

To trochę tak jak z kupowaniem biletów miesięcznych komunikacji miejskiej. Mimo, że ma "miesięczny" w nazwie, to tak naprawdę zawsze kupuje się go na 30 dni - i wszystkie kalkulacje są proste smile.gif


--------------------
there is much to be learned
Go to the top of the page
+Quote Post
Crozin
post
Post #5





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Od czegoś ten DateTime w końcu jest, co nie?
  1. $yearAgo = new DateTime('-1 year');
  2. $someDate = new DateTime('24.04.2009');
  3.  
  4. if ($someDate == $yearAgo) {
  5. // dokładnie rok temu
  6. } else if ($someDate > $yearAgo) {
  7. // mniej niż rok temu
  8. } else {
  9. // więcej niż rok temu
  10. }
PS. W PHP operatory porównania dla obiektu DateTime są przeciążone, stąd możliwość takiego zapisu.

Ten post edytował Crozin 8.03.2012, 02:24:54
Go to the top of the page
+Quote Post
Elber
post
Post #6





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Super działa wink.gif Tylko coś nie da się sprawdzić dokładnego roku, czyli jak dam

$yearAgo = new DateTime('+1 year');
$someDate = new DateTime('08.03.2013');

to warunek

$someDate == $yearAgo

powinien być spełniony ale nie jest, jak sprawdzić czy minie równy rok ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
poli25
post
Post #7





Grupa: Zarejestrowani
Postów: 239
Pomógł: 20
Dołączył: 19.02.2010

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


Na tej stroniesprawdz rok przestepny
jest fajna fukcja ktora sprawdza czy rok jest przestepny wtedy wiesz ile dni masz masz odejowac

"function is_leap($year=NULL) {
return checkdate(2, 29, ($year==NULL)? date('Y'):$year); // true if is a leap year
}"

poczytaj otez tutaj http://md.php.net/manual/en/function.date.php
o leap year

Ten post edytował poli25 8.03.2012, 12:49:37
Go to the top of the page
+Quote Post
Elber
post
Post #8





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Już sobie ładnie poradziłem wink.gif

$yearAgo = new DateTime(date('d.m.Y') . '- 1 year');

A jak sprawdzić ile miesięcy jest różnicy między tymi datami ?

Kod
    $start = strtotime(date('d.m.Y'));

    $stop = strtotime('1.03.2013');    
    
    echo round(($stop-$start)/60/60/24/30);


Dobrze to obliczam ?

Ten post edytował Elber 8.03.2012, 16:18:49


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Crozin
post
Post #9





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. DateTime::diff().
2. DateInterval.
Go to the top of the page
+Quote Post
Elber
post
Post #10





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


kurcze nie umiem znaleźć precyzyjnej metody która mi dokładnie policzy ile miesięcy jest różnicy np. między 08.03.2012 (dziś) a 06.06.2014 questionmark.gif powinno to zaokrąglać w górę (dni) czyli powinno wskazać 27 miesięcy...jak do tego dojść ?


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Crozin
post
Post #11





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


1. Pomiędzy tymi dwoma datami minęło 26, nie 27 miesięcy.
2. Da się to obliczyć przy pomocy podanych przeze mnie metod. Pokaż co próbowałeś zrobić.
Go to the top of the page
+Quote Post
Elber
post
Post #12





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Kod
$data_teraz = date('d.m.Y');
    $data_podana = '07.08.2012';
$datetime1 = date_create($data_teraz);
    $datetime2 = date_create($data_podana);

    $diff = $datetime1->diff($datetime2);
    
    $miesiace = $diff->format('%m');
echo $miesiace;


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Crozin
post
Post #13





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Podpowiedź: DateInterval zawiera liczbę lat, miesięcy, dni, godzin, minut oraz sekund. Czyli łączna ilość miesięcy to 12 * liczbaLat + liczbaMiesięcy.
Go to the top of the page
+Quote Post
Elber
post
Post #14





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Ale nie wiem jak go użyć w praktyce ;(


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Crozin
post
Post #15





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


  1. print_r($diff);
No to to już Ci musi wszystko rozjaśnić...
Go to the top of the page
+Quote Post
Elber
post
Post #16





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Wszystko byłoby super gdyby nie zerował liczby miesięcy, bo jak już wskoczy 1 rok to miesiące na 0 przeskakują ;/


--------------------
GG: 564555
Go to the top of the page
+Quote Post
Crozin
post
Post #17





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Serio? Nie potrafisz liczby lat i miesięcy zamienić na łączną liczbę miesięcy, mając do tego podany wzór? Zdajesz sobie sprawę, że takie zadanie mogłoby być ubliżające dla co poniektórych przedszkolaków?
Go to the top of the page
+Quote Post
Elber
post
Post #18





Grupa: Zarejestrowani
Postów: 381
Pomógł: 12
Dołączył: 9.07.2007

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


Sory, ale męczę to już tyle godzin że nie myślę racjonalnie, mogę pomnożyć $diff->y * 12 jeśli jest większy niż 0


--------------------
GG: 564555
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 Aktualny czas: 19.08.2025 - 11:00