Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Daty z przedzialu czasu
Forum PHP.pl > Forum > Przedszkole
kiler129
Mam dane 2 daty:

Kod
$data_start = '2008-07-30';
$data_end = '2008-08-3';


Chcialbym aby skrypt wypisal cos takiego:
Kod
2008-07-30
2008-07-31
2008-08-01
2008-08-02
2008-08-03


Szukalem w google ale nic nie znalazlem ciekawego sciana.gif
ferrero2
Jeśli chodzi o php wystarczy użyć pętli + funkcji mktime np :

Kod
<?php
#do zmiennej $tajm_poczatek przypisujemy w formacie Ymd datę i formatujemy ją w następujący sposób (godziny,minuty,sekundy,miesiące,dni,lata)
$tajm_poczatek = date("Y-m-d", mktime (0,0,0,7,30,2008));
#do zmiennej $tajm_koniec przypisujemy w formacie Ymd datę i formatujemy ją w następujący sposób (godziny,minuty,sekundy,miesiące,dni,lata)
$tajm_koniec = date("Y-m-d", mktime (0,0,0,8,3,2008));
#wypisujemy wszystkie daty spomiędzy podanego zakresu
$licznik =1;
while($tajm_poczatek < $tajm_koniec)
{
$tajm_poczatek = date("Y-m-d", mktime (0,0,0,07,30+$licznik,2008));
echo $tajm_poczatek . '<br />';
$licznik++;
}
?>


Najprościej jednak takie daty pobierać z bazy i ograniczyć zakres poprzez kwerendę SQL smile.gif

Pozdrawiam
Mariusz
oscar17
Kiedyś napisałem (bądź znalazłem) coś takiego:
  1. <?php
  2. function dates_between_dates($start_date, $end_date, $time_diff='+1 day') {
  3.  
  4. // Standardize date formats
  5. $start_date = date('Y-m-d H:i', strtotime($start_date));
  6. $end_date = date('Y-m-d H:i', strtotime($end_date));
  7.  
  8. if (strtotime($start_date) > strtotime($end_date)) {
  9. return array();
  10. }
  11.  
  12. // initialize array with start date
  13. $return_array = array();//array($start_date);
  14.  
  15. // Initialize loop counter date
  16. $the_date = $start_date;
  17.  
  18. // loop through days
  19. while (date('Y-m-d H:i', strtotime($the_date.$time_diff)) <= $end_date) {
  20. $the_date = date('Y-m-d H:i', strtotime($the_date.$time_diff));
  21. $return_array[] = $the_date;
  22. }
  23.  
  24. return $return_array;
  25. }
  26. ?>

Możesz sobie dodatkowo ustawić co ile ma się zmieniać data - standardowo jest co jeden dzień, ale można rzadziej...

--edit---

A tutaj masz ją przystosowaną pod twoje wymagania
  1. <?php
  2. function dates_between_dates($start_date, $end_date, $time_diff='+1 day') {
  3.  
  4.  // Standardize date formats
  5.  $start_date = date('Y-m-d', strtotime($start_date));
  6.  $end_date = date('Y-m-d', strtotime($end_date));
  7.  
  8. if (strtotime($start_date) > strtotime($end_date)) {
  9. return array();
  10. }
  11.  
  12. // initialize array with start date
  13. $return_array = array($start_date);
  14.  
  15. // Initialize loop counter date
  16. $the_date = $start_date;
  17.  
  18. // loop through days
  19. while (date('Y-m-d', strtotime($the_date.$time_diff)) <= $end_date) {
  20. $the_date = date('Y-m-d', strtotime($the_date.$time_diff));
  21. $return_array[] = $the_date;
  22. }
  23. return $return_array;
  24. }
  25.  
  26. print_r(dates_between_dates('2008-07-30', '2008-08-03'));
  27. ?>
kiler129
Dzieki chlopcy smile.gif
ferrero2 - pobieram oczywiscie wg dat bo jakbym chcial pobrac wszytko to przy kilku milionach rekordow zapchalbym wszytko. Chodzi o to ze z roznych zrodel sa dane, nie tylko z mysql.
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.