Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] Wyznaczanie dat
q3d
post 26.10.2017, 10:22:12
Post #1





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
freemp3
post 26.10.2017, 10:30:39
Post #2





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


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.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
q3d
post 26.10.2017, 13:05:46
Post #3





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


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?

Go to the top of the page
+Quote Post
freemp3
post 26.10.2017, 14:02:16
Post #4





Grupa: Zarejestrowani
Postów: 467
Pomógł: 77
Dołączył: 6.09.2008
Skąd: Miechów / Kraków

Ostrzeżenie: (0%)
-----


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ć.


--------------------
Niemożliwym jest stworzenie czegokolwiek idiotoodpornego, ponieważ idioci są wyjątkowo pomysłowi.

https://www.aroch.pl
https://themeforest.net/user/aroch
https://www.astroblog.aroch.pl
https://www.4geeks.pl
Go to the top of the page
+Quote Post
Pyton_000
post 26.10.2017, 14:04:38
Post #5





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
q3d
post 26.10.2017, 14:15:24
Post #6





Grupa: Zarejestrowani
Postów: 98
Pomógł: 7
Dołączył: 10.01.2006

Ostrzeżenie: (0%)
-----


Dziękuje.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 14.08.2025 - 06:30