Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Czas UNIXowy z podziałem na dzień i na noc
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam mam pytanie jak z bazy danych gdzie mam pole zawierające datę i godzinę w systemie UNIXowym 1513180800, 1513184400 itp wyciągnąć rekordy które przypisane są do dnia i do nocy.
Rekordy w bazie aktualizują się co godzinę.
nospor
No to wybierasz rekordy, ktore sa miedzy jedna a druga godzina. w czym problem?
brzanek
No tak ale w bazie danych mam rekordy na 7 dni co godzinę.
Chciałbym aby np. dzień był od godziny 07:00 do 19:00 i noc od 19:00 do 07:00
Czyli
Dzień 1: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 2: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 3: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 4: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 5: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 6: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)

Dzień 7: 07:00 - 19:00 (07:00, 08:00, 09:00, 10:00, 11:00, 12:00, 13:00, 14:00, 15:00, 16:00, 17:00, 18:00)
Noc 19:00 - 07:00 (19:00, 20:00, 21:00, 22:00, 23:00, 00:00, 01:00, 02:00, 03:00, 04:00, 05:00, 06:00)
nospor
No i wczym problem? Ustawiasz warunek na godzine od i do i jedziesz
trueblue
Tworzysz więc dodatkowe kryterium podziału, czyli dzień.
A dzień uzyskasz z WEEKDAY(data)+1.

Jak zaczniesz myśleć o tym, że Twoje czasy UNIX-owe, to po prostu data+czas, to może Ci się rozjaśni.
brzanek
No tak tylko jaki to warunek bo przecież czas UNIXowy będzie co godzinę się zmieniał
Dzisiaj godzina 19:00 to 1513188000
Jutro godzina 19:00 to będzie 1513274400
A 24.12.2017 godzina 19:00 to będzie 1514138400
Więc jak powinien wyglądać ten warunek od 07:00 do 19:00?
trueblue
Od 07:00 do 19:00 jakiego dnia? Obojętnie jakiego?
brzanek
Generalnie to obojętnie jakiego bo potrzebował będę wyciągnąć dane z dzisiaj, jutro, pojutrze itd.
trueblue
No, to już Ci nospor napisał - wybierasz rekordy z danego zakresu godzinowego.
Zamień czas unixowy na datę, a z daty wyciągnij czas.
brzanek
ok mam już w bazie samą godzinę w formacie np: 18:00 ; 19:00 itd.
Jak teraz powinno wyglądać zapytanie do BD które będzie zawierało przedział od 19:00 do 07:00 i kolejne od 07:00 do 19:00
trueblue
W bazie masz samą godzinę? A po co?

Zaglądasz czasem do dokumentacji?
https://dev.mysql.com/doc/refman/5.5/en/dat...n_from-unixtime
https://dev.mysql.com/doc/refman/5.5/en/dat...l#function_time
brzanek
Jak już mam w bazie godzinę w formacie hh:mm to już niech tak zostanie.
Teraz zrobiłem takie zapytanie
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT * FROM prognoza_godzinowa WHERE hgodzina BETWEEN ".$start." AND ".$koniec." ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].'</div><br>';
  10. }
  11. ?>

Ale nic się nie wyświetla.

Ok już mam
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT * FROM prognoza_godzinowa WHERE hgodzina BETWEEN ".$start." AND ".$koniec." ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].'</div><br>';
  10. }
  11. ?>

Teraz tylko jak zrobić aby rekordy nie powtarzały się i aby można było wyciągnąć dane z jutrzejszego dnia również z tych samych godzin.
trueblue
Nie wiem jak uzyskujesz prawidłowy wynik, skoro godziny to stringi.

Jeśli mają się nie powtarzać, to musisz je jakoś pogrupować. Według czego chcesz grupować?
brzanek
Zrobiłem tak
  1. <?
  2. include('db.php');
  3.  
  4. $start = "07:00";
  5. $koniec = "19:00";
  6.  
  7. $result = $mysqli->query("SELECT DISTINCT hgodzina, hwindGust FROM prognoza_godzinowa GROUP BY hgodzina WHERE hgodzina BETWEEN '".$start."' AND '".$koniec."' ");
  8. while ( $row = mysqli_fetch_array($result) ) {
  9. echo '<div>'.$row['hgodzina'].' : '.$row['hwindGust'].'</div><br>';
  10. }
  11. ?>

Ale nic się nie wyświetla
aras785
W zmiennej $start oraz $koniec musi być czas unixowy...

dzisiaj:

  1. $start = strtotime("today 7:00");
  2. $koniec = strtotime("today 19:00");


wczoraj:
  1. $start = strtotime("yesterday 7:00");
  2. $koniec = strtotime("yesterday 19:00");


jutro:

  1. $start = strtotime("tomorrow 7:00");
  2. $koniec = strtotime("tomorrow 19:00");


za 5 dni

  1. $start = strtotime("+5 days 7:00");
  2. $koniec = strtotime("+5 days 19:00");
trueblue
Najpierw WHERE potem GROUP BY.
brzanek
Wielkie dzięki - pomogło
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.