Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Usuwanie dat
Forum PHP.pl > Forum > PHP
Largo
Witam,

Mam listę wyboru miesięcy. Z początku pobiera ona dane na zasadzie do 12 miesięcy od daty rejestracji i to działa idealnie. Ale skrypt jak minie 12 miesięcy, kończy iterację, aby nie zrobić listy tak wydłużonej i ma pokazywać ostatnie 12 miesięcy względem dzisiejszego miesiąca. Jak to zrobić? Jako przykład podam:

Użytkownik zarejestrował się 1 Grudnia 2008 roku, więc wg. skryptu bez limitu lista miałaby 16 pozycji. Ale ja chcę, aby lista wygenerowała listę na zasadzie:

...
Marzec 2010

Zamiast kropek 11 miesięcy.

Pozdrawiam,
Largo
DiH
Jeżeli zapytaniem pobierasz faktycznie konkretnie miesiące, to wystarczyłoby do zapytania LIMIT 12.
Largo
  1. /* User want to see that? */
  2. if( $this->memberData['member_fg_show_stats'] && !$this->isModeratorSection )
  3. {
  4. /* Create list of months! */
  5. $startDate = $this->memberData['joined'];
  6. $actualDate = time();
  7. $actualMonth = date( 'n', $actualDate );
  8. $monthsData = '';
  9. $countMonths = 1;
  10.  
  11. /* Joined date is older than 12 months? */
  12. /* Jak to zrobić? */
  13.  
  14. /* Set start date... */
  15. IPSTime::setTimestamp( $startDate );
  16.  
  17. /* Create language array of months */
  18. $monthsNames = array( $this->lang->words['M_1'], $this->lang->words['M_2'], $this->lang->words['M_3'],
  19. $this->lang->words['M_4'], $this->lang->words['M_5'], $this->lang->words['M_6'],
  20. $this->lang->words['M_7'], $this->lang->words['M_8'], $this->lang->words['M_9'],
  21. $this->lang->words['M_10'], $this->lang->words['M_11'], $this->lang->words['M_12'] );
  22.  
  23. /* List months! */
  24. while( $startDate < $actualDate )
  25. {
  26. /* More than 12 months? */
  27. if( $countMonths >= 12 )
  28. {
  29. break;
  30. }
  31.  
  32. /* Get Month */
  33. $dateArray = IPSTime::unixstamp_to_human( $startDate );
  34.  
  35. /* Add to list of months... */
  36. $monthsData .= "\t<option value='{$dateArray['month']}'";
  37. $monthsData .= ( $inputMonth && ( $inputMonth == $dateArray['month'] ) ) ? " selected='selected'" : '';
  38. $monthsData .= ">{$monthsNames[ $dateArray['month'] - 1 ]} {$dateArray['year']}</option>\n";
  39.  
  40. /* Add month! */
  41. IPSTime::add_month();
  42. $startDate = IPSTime::getTimestamp();
  43.  
  44. /* Increment! */
  45. $countMonths++;
  46. }
  47.  
  48. /* Current month? */
  49. $monthsData .= "\t<option value='".$actualMonth."'";
  50. $monthsData .= ( !$inputMonth ) ? " selected='selected'" : '';
  51. $monthsData .= ">{$monthsNames[ date( 'm', $startDate ) - 1 ]} ".date( 'Y', $startDate)."</option>\n";
  52. }


Datę pobieram na zasadzie ostatnie 12 miesięcy, jeżeli data dołączenia jest większa niż 12 miesięcy.
DiH
Spróbuj pobrać dane do wyświetlenia zapytaniem:
  1. SELECT * FROM tabela WHERE data_dodania < DATE_SUB(NOW(), INTERVAL 12 MONTH);


Poczytaj także:
http://dev.mysql.com/doc/refman/5.1/en/dat...nction_date-sub
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.