Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Liczba wspólnych dni w przedziale dat
emantuch
post
Post #1





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

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


Witam,
nie mam pomysły,a nie nigdzie nie natknąłem sie jak mółbym wyciągnać z przedziału dat np.

1.01.2012 - 5.01.2012
3.01.2012 - 12.01.2012


Jak wyliczyć ilość wspólnych dni z takiego przedziału?

Jak rozwiązać sytuacje gdy są 3 przedziały:

1.01.2012 - 5.01.2012
3.01.2012 - 12.01.2012
11.01.2012 - 18.01.2012


Pomoże ktoś?
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
trueblue
post
Post #2





Grupa: Zarejestrowani
Postów: 6 806
Pomógł: 1828
Dołączył: 11.03.2014

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


https://www.google.pl/search?q=php+intersection+date+ranges


--------------------
Go to the top of the page
+Quote Post
Pyton_000
post
Post #3





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Wygeneru sobie 3 tablice z dniami w przedziałach i zrób intersection
Go to the top of the page
+Quote Post
emantuch
post
Post #4





Grupa: Zarejestrowani
Postów: 22
Pomógł: 1
Dołączył: 23.09.2015

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


Cytat(Pyton_000 @ 27.11.2015, 12:13:58 ) *
Wygeneru sobie 3 tablice z dniami w przedziałach i zrób intersection

Dzięki wielkie za podpowiedź smile.gif

Jako, że sam lubię gdzieś tam odnajdywać jakieś skrypty na forach, wrzucam kod który rozwiązał mój problem, może komuś kiedyś się przyda. smile.gif

  1. <?php
  2. $a1 = "2015-10-01";
  3. $a2 = "2015-10-15";
  4. $b1 = "2015-10-03";
  5. $b2 = "2015-10-18";
  6.  
  7. $intersection = getIntersection($a1,$a2,$b1,$b2);
  8. if($intersection === false)
  9. {
  10. echo 'Bład w datach;
  11. }
  12. else
  13. {
  14. $wyciag1 = date('Y-m-d', $intersection['start']);
  15. $wyciag2 = date('Y-m-d', $intersection['end']);
  16. echo 'From '.date('Y-m-d', $intersection['start']).' till '.date('Y-m-d', $intersection['end']);
  17. }
  18.  
  19. function getIntersection($a1,$a2,$b1,$b2)
  20. {
  21. $a1 = strtotime($a1);
  22. $a2 = strtotime($a2);
  23. $b1 = strtotime($b1);
  24. $b2 = strtotime($b2);
  25. if($b1 > $a2 || $a1 > $b2 || $a2 < $a1 || $b2 < $b1)
  26. {
  27. return false;
  28. }
  29. $start = $a1 < $b1 ? $b1 : $a1;
  30. $end = $a2 < $b2 ? $a2 : $b2;
  31.  
  32. return array('start' => $start, 'end' => $end);
  33. }
  34.  
  35. ?>


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: 20.08.2025 - 02:41