![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Witam,
mam problem (IMG:style_emoticons/default/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ą ? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 447 Pomógł: 191 Dołączył: 26.03.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 ?
|
|
|
![]()
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? (IMG:style_emoticons/default/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 (IMG:style_emoticons/default/smile.gif) |
|
|
![]()
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?
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 |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Super działa (IMG:style_emoticons/default/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 ? |
|
|
![]()
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 |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 381 Pomógł: 12 Dołączył: 9.07.2007 Ostrzeżenie: (0%) ![]() ![]() |
Już sobie ładnie poradziłem (IMG:style_emoticons/default/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 |
|
|
![]()
Post
#9
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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 (IMG:style_emoticons/default/questionmark.gif) powinno to zaokrąglać w górę (dni) czyli powinno wskazać 27 miesięcy...jak do tego dojść ?
|
|
|
![]()
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ć. |
|
|
![]()
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; |
|
|
![]()
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.
|
|
|
![]()
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 ;(
|
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 6 476 Pomógł: 1306 Dołączył: 6.08.2006 Skąd: Kraków Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
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ą ;/
|
|
|
![]()
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?
|
|
|
![]()
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
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 23.08.2025 - 03:48 |