Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Wyznaczanie dat
Forum PHP.pl > Forum > Przedszkole
q3d
Chciałbym wyznaczyć zakresy dat od dnia do dnia o okresie 30 dni.
Data początkowa: 18-09-2017
Okres: 30 dni


  1. $startDate = explode('-', '18-09-2017');
  2. $startDateUnix = mktime(0, 0, 0, $startDate[1], $startDate[0], $startDate[2]);
  3.  
  4. $duration = 30;
  5. $durationUnix = $duration*24*60*60;
  6.  
  7. for ($period=0; $period<12; $period++) {
  8. $startPeriodUnix = $startDateUnix + $period * $durationUnix;
  9. $endPeriodUnix = $startPeriodUnix + $durationUnix - 1;
  10.  
  11. echo date('H:i:s d-m-Y',$startPeriodUnix).' '.date('H:i:s d-m-Y',$endPeriodUnix).'<br />';
  12. }


Gdy to wyświetlam otrzymuje:
00:00:00 18-09-2017 23:59:59 17-10-2017
00:00:00 18-10-2017 22:59:59 16-11-2017
23:00:00 16-11-2017 22:59:59 16-12-2017
23:00:00 16-12-2017 22:59:59 15-01-2018
23:00:00 15-01-2018 22:59:59 14-02-2018
23:00:00 14-02-2018 22:59:59 16-03-2018
23:00:00 16-03-2018 23:59:59 15-04-2018
00:00:00 16-04-2018 23:59:59 15-05-2018
00:00:00 16-05-2018 23:59:59 14-06-2018
00:00:00 15-06-2018 23:59:59 14-07-2018
00:00:00 15-07-2018 23:59:59 13-08-2018
00:00:00 14-08-2018 23:59:59 12-09-2018

Dlaczego w niektórych wierszach otrzymuje że okres kończy się o 22:59:59, a nie o 23:59:59? Jak sądzę to, że w niektórych wierszach okresach okres rozpoczyna się od 23:00:00 ( a tym samym pierwszy dzień kolejnego okresu też jest błędny) też z tego wynika.
freemp3
W okresie październik - listopad jest zmiana na czas zimowy, natomiast w okresie marzec - kwiecień jest zmiana na letni. Dlatego jest to przesunięcie o godzinę.
Zamiast operować na funkcjach mktime oraz date lepiej było by Ci użyć klas DateTime oraz DateInterval.
q3d
Dziękuje. Faktycznie nie uwzględniłem zmiany czasu.

Zrobiłem tak:
  1. $date = new DateTime('2017-09-18');
  2. $interval = new DateInterval('P30D');
  3.  
  4. for ($period=0; $period<12; $period++) {
  5. echo $date->format('d-m-Y H:i:s').' ';
  6.  
  7. $date->add(new DateInterval('P30D'));
  8.  
  9. echo $date->format('d-m-Y H:i:s').'<br />';
  10.  
  11. }


Otrzymuje:
18-09-2017 00:00:00 18-10-2017 00:00:00
18-10-2017 00:00:00 17-11-2017 00:00:00
17-11-2017 00:00:00 17-12-2017 00:00:00
17-12-2017 00:00:00 16-01-2018 00:00:00
16-01-2018 00:00:00 15-02-2018 00:00:00
15-02-2018 00:00:00 17-03-2018 00:00:00
17-03-2018 00:00:00 16-04-2018 00:00:00
16-04-2018 00:00:00 16-05-2018 00:00:00
16-05-2018 00:00:00 15-06-2018 00:00:00
15-06-2018 00:00:00 15-07-2018 00:00:00
15-07-2018 00:00:00 14-08-2018 00:00:00
14-08-2018 00:00:00 13-09-2018 00:00:00

Czy to tak jest że 00:00:00 jest jednoczenie początkiem i końcem?

freemp3
Zmieniasz datę o pełne 30 dni, więc godzina pozostaje ta sama. Możesz od daty końcowej odjąć jedną sekundę, w tedy będziesz miał zakres o który Ci chodzi.
Możesz również przy sprawdzaniu daty w warunku, w dacie początkowej dodać znak równości, natomiast przy końcowej już nie. Wszystko zależy od tego, co chcesz z tymi wartościami zrobić.
Pyton_000
ustaw sobie interval na 29D i przy wyświetlaniu ustaw na sztywno dla początku 00:00:00 a dla końca 23:59:59.
Zresztą to samo mogłeś zrobić w poprzednim i wyszłoby na to samo smile.gif
q3d
Dziękuje.
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.