Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: kalendarz i cykliczność
Forum PHP.pl > Forum > PHP
Mlodycompany
Powitać wszystkich. Robię kalendarz z możliwością tworzenia cyklicznych zadań. Utknąłem na cykliczności tygodniowej. Mam taki kod
  1. define('SECDAY', 86400);
  2. $round = 0;
  3.  
  4. $weeks = array();
  5.  
  6. $count = ceil($_POST['cyclicity']['finish']['round'] / count($_POST['cyclicity']['days']));
  7. for($i = 0; $i < $count; $i++){
  8. $time = $startTime + 7 * SECDAY * $i * $_POST['cyclicity']['repeat'];
  9. $week = date("W", $time);
  10. $year = date("Y", $time);
  11. $weeks[] = $year.":".$week;
  12. }
  13. while ($round < $_POST['cyclicity']['finish']['round']) {
  14.  
  15. $isDay = in_array(date("N", $startTime), $_POST['cyclicity']['days']);
  16. $isWeek = in_array(date("Y:W", $startTime), $weeks);
  17. echo date("N", $startTime), ":".$isDay. "\t";
  18. echo date("Y:W", $startTime), ":".$isWeek. "\n";
  19. if ($isDay && $isWeek) {
  20. $options = $_POST;
  21. $options['id'] = 'add_' . rand(0, 99999999999);
  22. if ($parentId == null) {
  23. $parentId = $options['id'];
  24. }
  25. else {
  26. $options['parentId'] = $parentId;
  27. }
  28. $options['start'] = date('Y-m-d H:i', $startTime);
  29. if ($length) {
  30. $options['end'] = date('Y-m-d H:i', $startTime + $length);
  31. }
  32. $events[] = $options;
  33. $round ++;
  34. $startTime += SECDAY;
  35. }
  36. else {
  37. $startTime += SECDAY;
  38. }
  39.  
  40. }


Na wstępie wrzucam sobie do tablicy wszystkie tygodnie, w których dane zadanie będzie miało miejsce. To działa dobrze. Problem powstaje w momencie gdy zmienia się rok na następny. Tydzień wtedy się 'zeruje'. Gdy while np. dojdzie do dnia 30.12.2013, który znajduje się w 1 tygodniu, ale w 2013 roku. W tablicy z tygodniami mam 50 tydzień 2013 roku, następnie 1 tydzien 2014 roku, 4/2014 a 1/2013 się w niej nie znajduje. Pytanie brzmi jak zrobić aby
  1. date("Y:W", strtotime("30.12.2013"))
zwróciło zamiast 2013:01 to 2014:01. Wiem, że trochę do kitu to wytłumaczyłem ale jakoś nie wiem jak to opisać..
nospor
Poprostu, jesli W = 1 a miesiac 12, znaczy ze masz ustawic rok o jeden wyzszy niz aktualnie przetwarzasz
Mlodycompany
kurde, nie wpadłem na to. a mówili w szkole, że najprostsze rozwiązanie jest najlepsze... no cóż. Dzięki wielkie smile.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.