Witam,

Mam problem ze stworzeniem prostej listy wyboru listy miesięcy od daty rejestracji. Nie mam problemu z wygenerowaniem samych miesięcy, wykonuję to tym kodem:


  1. /* Create list of months! */
  2. $userJoinDate = $this->memberData['joined'];
  3. $actualDate = time();
  4. $actualMonth = date( 'F', $actualDate );
  5. $monthsData = '';
  6. $countMonths = 1;
  7.  
  8. /* Set to current time! */
  9. IPSTime::setTimestamp( $userJoinDate );
  10.  
  11. /* Create language array of months */
  12. $monthsNames = array( $this->lang->words['M_1'], $this->lang->words['M_2'], $this->lang->words['M_3'],
  13. $this->lang->words['M_4'], $this->lang->words['M_5'], $this->lang->words['M_6'],
  14. $this->lang->words['M_7'], $this->lang->words['M_8'], $this->lang->words['M_9'],
  15. $this->lang->words['M_10'], $this->lang->words['M_11'], $this->lang->words['M_12'] );
  16.  
  17. /* List months! */
  18. while( $userJoinDate <= $actualDate )
  19. {
  20. /* More than 12 months? */
  21. if( $countMonths >= 12 )
  22. {
  23. break;
  24. }
  25.  
  26. /* Get Month */
  27. $dateArray = IPSTime::unixstamp_to_human( $userJoinDate );
  28.  
  29. /* Add to list of months... */
  30. $monthsData .= "\t<option value='{$dateArray['month']}'";
  31. $monthsData .= ( $actualMonth == $dateArray['month'] ) ? " selected='selected'" : '';
  32. $monthsData .= ">{$monthsNames[ $dateArray['month'] - 1 ]} {$dateArray['year']}</option>\n";
  33.  
  34. /* Add month! */
  35. IPSTime::add_month();
  36. $userJoinDate = IPSTime::getTimestamp();
  37.  
  38. /* Increment! */
  39. $countMonths++;
  40. }


Jedyny znany mi błąd, to ten, że nie dodaje mi ostatniego miesiąca, ale z tym sobie jakoś poradzę. Problem tkwi w tym, że wybierając jeden z miesięcy, ma Ajax aktualizować wyniki, ale co zapisać w wartości opcji? Nie ma sensu zapisywać ID miesiąca, bo je generuję do 12 miesięcy, aby lista nie była zbyt duża, a także, żeby wyników nie było za dużo. Nie widzę sensu zapisywać wartości jako datę unixową, chyba, że to ma sens? To ma działać tylko dla wywołań Ajax, więc sprawa rozbija się o zapisanie wartości i dlaczego nie dodaje mi ostatniego możliwego miesiąca?

Moim celem jest stworzenie listy w ten sposób:

Grudzień 2009
Styczeń 2010
Luty 2010

Gdzie w grudniu nastąpiła rejestracja do dnia dzisiejszego. Żebym mógł w łatwy sposób via Ajax aktualizować wyniki.

Pozdrawiam,
Largo

Witam,

Z tamtym problemem sobie poradziłem w 100% i nie okazał się trudny :-) Ale moim nowym problem jest zapytanie MySQL. Mam danę zapisywaną w formacie unixowym, więc operacje na formacie dat z MySQL odpada, zostaje konwersja, ale to za dużo roboty. Mam rozwiązanie polegające na dołączeniu deklaracji warunku z datami pomiędzy, więc wykorzystanie BETWEEN, ale czy to najoptymalniejsze wyjście?

Myślałem, że dałoby się poprzez przygotowanie danych wykorzystać warunek, że w danym miesiącu. Mam do wyboru z opcji dać nazwę miesiąc ( IMHO bezsens ), ale dałem liczbę określającą dany miesiąc. I jak takie zapytanie stworzyć? Problem polega na tym, że użytkowników wybiera danych miesiąc i tylko z niego są pokazywane informacje.

Proszę o porady.

Pozdrawiam,
Largo