Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]wyswietlenie harmonogramu dat
Forum PHP.pl > Forum > Przedszkole
shaolin33
witam,

potrzebuje pomocy w utworzeniu harmonogramu dat


mam datę w formacie:

2013-08-31

oraz
okres= 10 miesięcy


chce wyświetlić w tabeli kolejno 10 miesiący od daty 2013-08-31



1 2013-08-31
2 2013-09-30
3 2013-10-31
4 2013-11-30
5 2013-12-31
6 2014-01-31
7 2014-02-28
8 2014-03-31
9 2014-04-30
10 2014-05-31
freemp3
Możesz użyć klas DateTime oraz DateInterval:

http://www.php.net/manual/pl/class.datetime.php
http://php.net/manual/pl/class.dateinterval.php
pianta_d
http://forum.webhelp.pl/php-i-bazy-danych/...ni-t137935.html

Na dole masz sekcję Podobne linki, gdzie jest mnóstwo informacji na ten temat

Pozdrawiam
rocktech.pl
Witam.

  1. $begin = new DateTime('2013-08-01');
  2. $end = clone($begin);
  3. $end->modify("+1 year");
  4. /**
  5.  * @see <http://en.wikipedia.org/wiki/ISO_8601#Time_intervals>
  6.  */
  7. $interval = new DateInterval('P1M');
  8. $daterange = new DatePeriod($begin, $interval, $end);
  9.  
  10. foreach ( $daterange as $date ) {
  11. echo $date->format("Y-m-d").PHP_EOL;
  12. }


Jeżeli masz jakieś pytania odnośnie powyższego kodu to strzelaj. Temat nie jest do końca oczywisty ...
shaolin33
Cytat(rocktech.pl @ 26.08.2013, 09:25:51 ) *
Witam.

  1. $begin = new DateTime('2013-08-01');
  2. $end = clone($begin);
  3. $end->modify("+1 year");
  4. /**
  5.  * @see <http://en.wikipedia.org/wiki/ISO_8601#Time_intervals>
  6.  */
  7. $interval = new DateInterval('P1M');
  8. $daterange = new DatePeriod($begin, $interval, $end);
  9.  
  10. foreach ( $daterange as $date ) {
  11. echo $date->format("Y-m-d").PHP_EOL;
  12. }


Jeżeli masz jakieś pytania odnośnie powyższego kodu to strzelaj. Temat nie jest do końca oczywisty ...




top jest dla mnie neijasne: $interval = new DateInterval('P1M');

jak zmieniam w tym miejscu date $begin = new DateTime('2013-08-01'); na 2013-08-31 to nie pokazuje mi kolejnych ostattnich dni miesiąca
rocktech.pl
Zmień na:

  1. //Period30Days
  2. $interval = new DateInterval('P30D');


Przejrzyj link z wiki.
shaolin33
Cytat(rocktech.pl @ 26.08.2013, 09:46:36 ) *
Zmień na:

  1. //Period30Days
  2. $interval = new DateInterval('P30D');


Przejrzyj link z wiki.



no spoko tylko że wyswietla niezbyt poprawnie:


2013-08-31
2013-09-30
2013-10-30
2013-11-29
2013-12-29
2014-01-28
2014-02-27
2014-03-29
2014-04-28
2014-05-28
2014-06-27
2014-07-27
2014-08-26

i jeszcze jeden aspekt

okres jest zmienny wiec czasem to bedzie 12 miesiecy a czasem 65 miesiecy

czyli w takim przypadku musze ta linijke:

$end->modify("+1 year");

zmodyfikowac pod zmienna $okres ?
rocktech.pl
Dokładnie obiektowo.

  1. $end->modify("+65 months");


Co do ostatniego dnia możesz użyć formatu t - liczba dni w miesiącu.

  1. foreach ( $daterange as $date ) {
  2. echo $date->format("Y-m-t").PHP_EOL;
  3. }
shaolin33
$dane[152] - tutaj przyjmuje różne wartości

po wstawieniu nie wyswietla mi dat:(


$begin = new DateTime('2013-08-31');
$end = clone($begin);
$end->modify("+$dane[152]months");
nospor
miedzy wartoscia ile a tekstem month ma byc spacja... naprawde nie widzisz jej w kodzie poprzednika?
shaolin33
Cytat(nospor @ 26.08.2013, 11:02:15 ) *
miedzy wartoscia ile a tekstem month ma byc spacja... naprawde nie widzisz jej w kodzie poprzednika?


teraz widze ale nadal nie śmiga smile.gif

$dane[152]
pobieram z sqla
pianta_d
$end->modify("+65 months"); zmień na $end->modify("+152 months");

Sorki, nie doczytałem, że pobierasz z sql smile.gif

$dane=ile_miesięcy;
$end->modify("+".$dane." year");

Nei mogę tego sprawdzić bo mi serwer padł
shaolin33
Cytat(pianta_d @ 26.08.2013, 11:10:25 ) *
$end->modify("+65 months"); zmień na $end->modify("+152 months");

Sorki, nie doczytałem, że pobierasz z sql smile.gif

$dane=ile_miesięcy;
$end->modify("+".$dane." year");

Nei mogę tego sprawdzić bo mi serwer padł






  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+".$dane[152]."month");
  4. /**
  5.   * @see <http://en.wikipedia.org/wiki/ISO_8601#Time_intervals>
  6.   */
  7. $interval = new DateInterval('P30D');
  8. $daterange = new DatePeriod($begin, $interval, $end);
  9.  
  10. foreach ( $daterange as $date ) {
  11. echo $date->format("Y-m-t").PHP_EOL;
  12. }



nie wyświetla smile.gif
rocktech.pl
Hej.

  1. $end->modify("+".$dane[152]." months");


A jak nie działa to:

  1. echo "+".$dane[152]." months";
shaolin33
dziękuje, teraz smiga smile.gif

chciałbym jeszcze do wrzucić w tabelkę jedno pod drugim (czyli w jednej z kolumn) ale jak dodaje sama zmienna to mi nie smiga smile.gif
:



  1. echo '<table border="1">' ;
  2.  
  3.  
  4. echo '<tr><td><font size="2">LP.</font></td> <td><font size="2">DATA</font></td><td><font size="2">3 KOLUMNA</font></td><<td><font size="2">4 KOLUMNA</font></td><td><font size="2">5 KOLUMNA</font></td></tr>';
  5.  
  6.  
  7.  
  8.  
  9. echo '<tr> <td>$wiersz[0]</td><td>'.$date.'</td> <td>$wiersz[2]</td><td>$wiersz[3]</td><td>$wiersz[4]</td> </tr>';
  10.  
  11.  
  12. echo '</table>' ;
  13.  


SELECTEM chyba tego nie zrobie? bo t onie idzie z sqla ?

prawda?
Turson
Wrzuć w pętle
shaolin33
Cytat(TursoN @ 26.08.2013, 13:28:00 ) *
Wrzuć w pętle



mozna prosić o przykład ?

  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+".$dane[158]." months");
  4. $interval = new DateInterval('P30D');
  5. $daterange = new DatePeriod($begin, $interval, $end);
  6.  
  7. foreach ( $daterange as $date ) {
  8. echo $date->format("Y-m-t").PHP_EOL;
  9. }
  10.  
  11. //DO TEGO MOMENTU JEST OK, PONIŻEJ JUŻ MI NIE POKAZUJE TEBALEKI I DANYCH W KOLUMNIE
  12.  
  13.  
  14.  
  15. $wiersze = explode(',', $date);
  16. echo '<table>';
  17. foreach($wiersze as $wiersz) {
  18. $kolumny = explode('-', $wiersz);
  19. echo '<tr>';
  20. foreach($kolumny as $kolumna) {
  21. echo '<td>'.$kolumna.'</td>';
  22. }
  23. echo '</tr>';
  24. }
  25. echo '</table>';


no tu juz nie mam pomyslu jak to ogarnac zeby poprawie to wyswietlalo:(

Turson
Explode wywala dane w tablicy, np. $kolumny[0] $kolumny[1] itd, czyli zastosuj for()


PS wartośc w [] musi rosnąć automatycznie
shaolin33
  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+".$dane[158]." months");
  4. $interval = new DateInterval('P30D');
  5. $daterange = new DatePeriod($begin, $interval, $end);
  6.  
  7. foreach ( $daterange as $date ) {
  8. echo $date->format("Y-m-t").PHP_EOL;
  9. }
  10.  
  11. $wiersze = for(',', $date);
  12. echo '<table>';
  13. foreach($wiersze as $wiersz) {
  14. $kolumny = for('-', $wiersz);
  15. echo '<tr>';
  16. foreach($kolumny as $kolumna) {
  17. echo '<td>'.$kolumna.'</td>';
  18. }
  19. echo '</tr>';
  20. }
  21. echo '</table>';


poprawnie to napisalem czy cos pominalem ? bo bez zmian smile.gif
rocktech.pl
Żeby było jasne co chcesz osiągnąć wklej HTML w takiej postaci:

  1. <tr>
  2. <th>Co</td>
  3. <th>Co</td>
  4. </tr>
  5. </thead>
  6. <tr>
  7. <td>Wartość [np. 2012]</td>
  8. <td>Wartość [np. 1]</td>
  9. </tr>
  10. </tbody>
shaolin33
Cytat(rocktech.pl @ 29.08.2013, 13:25:34 ) *
Żeby było jasne co chcesz osiągnąć wklej HTML w takiej postaci:

  1. <tr>
  2. <th>Co</td>
  3. <th>Co</td>
  4. </tr>
  5. </thead>
  6. <tr>
  7. <td>Wartość [np. 2012]</td>
  8. <td>Wartość [np. 1]</td>
  9. </tr>
  10. </tbody>



no teraz to juz wogole nie załapałem o co chodzi:)


docelowo bede mial kilka kolumn ale akurat w tej chce aby mi sie wyswietliły daty
w słupku a nie we wierszu jak jest do tej pory



  1. <tr>
  2. <th>okres</td>
  3. <th>miesiac</td>
  4. </tr>
  5. </thead>
  6. <tr>
  7. <td>1</td>
  8. <td>2013-08-31</td>
  9. </tr>
  10. <tr>
  11. <td>2</td>
  12. <td>2013-09-30</td>
  13. </tr>
  14. <tr>
  15. <td>3</td>
  16. <td>2013-10-31</td>
  17. </tr>
  18. <tr>
  19. <td>4</td>
  20. <td>2013-11-30</td>
  21. </tr>
  22. <tr>
  23. <td>5</td>
  24. <td>2013-12-31</td>
  25. </tr>
  26. <tr>
  27. <td>6</td>
  28. <td>2014-01-31</td>
  29. </tr>
  30. <tr>
  31. <td>7</td>
  32. <td>2014-02-28</td>
  33. </tr>
  34. <tr>
  35. <td>8</td>
  36. <td>2014-03-31</td>
  37. </tr>
  38. <tr>
  39. <td>9</td>
  40. <td>2014-04-30</td>
  41. </tr>
  42. <tr>
  43. <td>10</td>
  44. <td>2014-05-31 </td>
  45. </tr>
  46. </tbody>
  47. </table>



zmienna - $okres - przyjmuje różne wartości
zmienna - $data_start przyjmuje datę od ktorej co miesiąc są liczone kolejne:)
rocktech.pl
Spróbuj jakoś tak ...

  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+" . $dane[ 158 ] . " months");
  4. $interval = new DateInterval('P30D');
  5. $daterange = new DatePeriod($begin, $interval, $end);
  6.  
  7. echo '<table>';
  8. foreach ( $daterange as $k => $date ) {
  9. echo '<tr>';
  10. echo '<td>' . ($k + 1) . '</td>';
  11. echo '<td>' . $date->format("Y-m-t") . '</td>';
  12. echo '</tr>';
  13. }
  14. echo '</table>';
shaolin33
Cytat(rocktech.pl @ 29.08.2013, 14:17:06 ) *
Spróbuj jakoś tak ...

  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+" . $dane[ 158 ] . " months");
  4. $interval = new DateInterval('P30D');
  5. $daterange = new DatePeriod($begin, $interval, $end);
  6.  
  7. echo '<table>';
  8. foreach ( $daterange as $k => $date ) {
  9. echo '<tr>';
  10. echo '<td>' . ($k + 1) . '</td>';
  11. echo '<td>' . $date->format("Y-m-t") . '</td>';
  12. echo '</tr>';
  13. }
  14. echo '</table>';



o to mi chodziło ale czemu jest 11 okresów a nie 10

po co do$k dodałes +1 ?



Cytat(shaolin33 @ 29.08.2013, 14:22:53 ) *
o to mi chodziło ale czemu jest 11 okresów a nie 10

po co do$k dodałes +1 ?



czy ktoś ma jeszcze jakąs sugestię?



Cytat(shaolin33 @ 2.09.2013, 13:27:03 ) *
o to mi chodziło ale czemu jest 11 okresów a nie 10

po co do$k dodałes +1 ?






czy ktoś ma jeszcze jakąs sugestię?


po bólach i trudach udało sięsmile.gif


  1. $begin = new DateTime('2013-08-31');
  2. $end = clone($begin);
  3. $end->modify("+".$dane[158]." months");
  4. $interval = new DateInterval('P1M');
  5. $daterange = new DatePeriod($begin, $interval, $end);
  6.  
  7.  
  8. echo '<table>';
  9. foreach ( $daterange as $k => $date ) {
  10. echo '<tr>';
  11. echo '<td width="50">' . ($k + 1) . '</td>';
  12. echo '<td width="100">' . $date->format("Y-m-t") . '</td>';
  13. echo '<td width="150">'.$kapital.'</td>';
  14. echo '<td width="100">'."4 kolumna".'</td>';
  15. echo '<td width="100">'."5 kolumna".'</td>';
  16. echo '</tr>';
  17. }
  18. echo '</table>';


harmonogram się poprawnie wylicza, pozostała mi jeszcze kolumna 4 i kolumna 5

mam nastepujace dane:
$data
$wartosc=10 000 ;
$okres = (tak jak pisalem wczesniej) 10
$oprocent = 14%
$stala_kwota= (np. 833.33)
w kolumnie 4 chce obliczyć odsetki

1 wiersz:

ze wzoru:

$odsetki=(ilosc_dni x $wartosc / 365) x 14%
illosc_dni = data1-data czyli (31-08-2013 minus 21-08-2013) daje 10 dni


nastepny wiersz juz $wartosc zostaje pomniejszona o $stala_wartosc i kolejne wiersze rowniez juz w pętli smile.gif

kolumna numer 6



1 2013-08-31 153.846153846 4 kolumna 153.846153846 1wiersz
2 2013-10-31 153.846153846 4 kolumna 153.846153846 2wiersz
3 2013-11-30 153.846153846 4 kolumna 153.846153846 3wiers
4 2013-12-31 153.846153846 4 kolumna 153.846153846 4wiers
5 2014-01-31 153.846153846 4 kolumna 153.846153846 5wiers
6 2014-02-28 153.846153846 4 kolumna 153.846153846 6wiers
7 2014-03-31 153.846153846 4 kolumna 153.846153846 7wiers
8 2014-04-30 153.846153846 4 kolumna 153.846153846 8wiers
9 2014-05-31 153.846153846 4 kolumna 153.846153846 9wiers
10 2014-06-30 153.846153846 4 kolumna 153.846153846 10wiers

1wiersz to bedzie $zmienna
2wiersz i nastepne wg wzoru:

2wiersz=kwota pierwszy wiersz minus $stała
i tak dalej
3wiersz= kwota drugi wiersz minus $stala smile.gif

tu jest to na obrazku zobrazowane 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.