Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [JavaScript][MySQL][PHP]Konwertowanie czasu
Forum PHP.pl > Forum > Przedszkole
brzanek
Witam pobieram z bazy danych mysql dane w których znajduje się data w formacie UNIX
Wyświetlam te dane w json za pomocą tego
  1. <?php
  2. header('Content-Type: application/json');
  3.  
  4. //database
  5. define('DB_HOST', 'localhost');
  6. define('DB_USERNAME', 'login');
  7. define('DB_PASSWORD', 'pass');
  8. define('DB_NAME', 'nazwa_bazy');
  9.  
  10. $mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
  11.  
  12. if(!$mysqli){
  13. die("Connection failed: " . $mysqli->error);
  14. }
  15.  
  16. $query = sprintf("SELECT htime, hwindSpeed, hprecipIntensity, htemperature, hcloudCover, hprecipProbability FROM prognoza_godzinowa WHERE htime >= UNIX_TIMESTAMP(UTC_DATE()) AND htime <= UNIX_TIMESTAMP(UTC_DATE() + INTERVAL 1 DAY) AND hid_miasto='".$_GET['hid_miasto']."'");
  17.  
  18. $result = $mysqli->query($query);
  19.  
  20. $data = array();
  21. foreach ($result as $row) {
  22. $data[] = $row;
  23. }
  24.  
  25. $result->close();
  26.  
  27. $mysqli->close();
  28.  
  29. print json_encode($data);


Wszystko ładnie działa ale potrzebuję wyciągnąć z całej daty samą godzinę z minutami. Jak tego dokonać?
Potrzebne jest mi to do wykresu bo teraz wy wygląda nie ciekawie z czasem unixowym.
viking
https://stackoverflow.com/questions/847185/...e-in-javascript

Masz kilka błędów. SQL injection, die które wywali parsowanie json po stronie js, iteracja po query które to może zwrócić false.
brzanek
viking podałeś mi stronę na której jest masa przykładów ale nie widzę tam żadnego co może mi pomóc.
Czy te błędy mają coś wspólnego z tym co chcę uzyskać?
W zapytaniu jakie stosuję na stronie do bazy mysql htime odpowiada za czas w unixie i wyświetla on się na stronie właśnie w takiej formie ale potrzebuję z tej daty wyciągnąć tylko godzinę i minuty w formacie H:i
Teraz to wygląda tak
http://brzanek.webd.pl/28082017/infusions/...hp?hid_miasto=9
viking
Znaczy czego nie widzisz? Operujesz na obiekcie Date w JS. Masz kupę przykładów.
brzanek
Nie wiem jak to zrobić
W php tak bym to zrobił
  1. echo "<div>".date("H:i", $row['htime'])."</div>";

Ale w java pojęcia nie mam gdzie i jak to zapisać.
trueblue
Możesz to również zrobić na poziomie samego zapytania MySQL.
Ale przecież są funkcje w JS, np.: https://developer.mozilla.org/en-US/docs/We...s/Date/getHours. Dołączysz analogiczną dla minut i otrzymasz to co chcesz.
brzanek
ok racja można to zrobić z poziomu zapytania do mysql
Zrobiłem tak
  1. $query = sprintf("SELECT FROM_UNIXTIME(htime) htime, hwindSpeed, hprecipIntensity, htemperature, hcloudCover, hprecipProbability FROM prognoza_godzinowa WHERE htime >= UNIX_TIMESTAMP(UTC_DATE()) AND htime <= UNIX_TIMESTAMP(UTC_DATE() + INTERVAL 1 DAY) AND hid_miasto='".$_GET['hid_miasto']."'");

Oczywiście dostaję w rezultacie datę w takiej postaci
np: 2017-09-14 11:00:00
Jak teraz z tego wyciągnąć damą godzinę i minuty czyli 11:00
viking
Zajrzyj w końcu do dokumentacji rozwiązań którymi się posługujesz. Do JS ci się nie chce to chociaż może mysql https://dev.mysql.com/doc/refman/5.5/en/dat...-functions.html
brzanek
Cały czas siedzę w tej instrukcji i nie mogę tego zrobić
  1. FROM_UNIXTIME(htime, '%H:%i')

Tak to nie działa.
trueblue
A co otrzymujesz?
brzanek
Wcześniej nic
Teraz zastosowałem takie coś
  1. TIME(FROM_UNIXTIME(htime))

i mam godziny, minuty i nieszczęsne sekundy
Jak zastosuje to
  1. HOUR(FROM_UNIXTIME(htime))

To mam same godziny bez minut
trueblue
Co otrzymujesz przy takim zapytaniu?
  1. SELECT FROM_UNIXTIME(1447430881,'%H:%i')

Podaj przykładowy timestamp ze swojej tabeli.
brzanek
Dałem
  1. FROM_UNIXTIME(1505383200,'%H:%i')

pojawia się pusta strona
http://brzanek.webd.pl/28082017/infusions/...hp?hid_miasto=9
trueblue
Jakoś chaotycznie to idzie.
Pytałem Ciebie o wynik zapytania. W tej chwili nie wiem czy wynikiem samego zapytania jest "nic", czy też miałeś na myśli wynik działania skryptu.
Włącz wyświetlanie błędów.
brzanek
Już włączyłem
Warning: sprintf(): Too few arguments in /home/brzanek/public_html/28082017/infusions/prognoza_panel/charts/opady.php on line 18
Warning: mysqli::query(): Empty query in /home/brzanek/public_html/28082017/infusions/prognoza_panel/charts/opady.php on line 20
Warning: Invalid argument supplied for foreach() in /home/brzanek/public_html/28082017/infusions/prognoza_panel/charts/opady.php on line 25
Fatal error: Call to a member function close() on a non-object in /home/brzanek/public_html/28082017/infusions/prognoza_panel/charts/opady.php on line 29

Cały kod wygląda tak
  1. <?php
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. header('Content-Type: application/json');
  5.  
  6. //database
  7. define('DB_HOST', 'localhost');
  8. define('DB_USERNAME', 'login');
  9. define('DB_PASSWORD', 'pass');
  10. define('DB_NAME', 'nazwa_bazy');
  11.  
  12. $mysqli = new mysqli(DB_HOST, DB_USERNAME, DB_PASSWORD, DB_NAME);
  13.  
  14. if(!$mysqli){
  15. die("Connection failed: " . $mysqli->error);
  16. }
  17.  
  18. $query = sprintf("SELECT FROM_UNIXTIME(1505383200,'%H:%i') htime, hwindSpeed, hprecipIntensity, htemperature, hcloudCover, hprecipProbability FROM prognoza_godzinowa WHERE htime >= UNIX_TIMESTAMP(UTC_DATE()) AND htime <= UNIX_TIMESTAMP(UTC_DATE() + INTERVAL 1 DAY) AND hid_miasto='".$_GET['hid_miasto']."'");
  19.  
  20. $result = $mysqli->query($query);
  21.  
  22.  
  23.  
  24. $data = array();
  25. foreach ($result as $row) {
  26. $data[] = $row;
  27. }
  28.  
  29. $result->close();
  30.  
  31. $mysqli->close();
  32.  
  33. print json_encode($data);
viking
Nazwy wybieranych wartości oddziela się przecinkiem. Sprawdź PM.
brzanek
A to nie jest oddzielone przecinkami
htime, hwindSpeed, hprecipIntensity, htemperature, hcloudCover, hprecipProbability
viking
Źle spojrzałem. Dałeś funkcję jako alias istniejącej w tabeli kolumny.
brzanek
To dobrze czy źle?
ps. viking przeczytałeś PW?
trueblue
Używasz sprintf, którego tak naprawdę...nie używasz.
Skoro chcesz go zostawić, to musisz escapować %, bowiem teraz formatowanie daty jest uznawane za osadzone parametry dla tej funkcji. Czyli ma być %%H.
Póki co wyrzuć jednak to sprint_f i zacznij korzystać z bindowania parametrów, skoro wykorzystujesz mysqli.
brzanek
Masz rację
Zmieniłem to troszkę i działa
  1. <?php
  2. ini_set( 'display_errors', 'On' );
  3. error_reporting( E_ALL );
  4. header('Content-Type: application/json');
  5.  
  6.  
  7. $con=@mysql_connect('localhost','login','pass');
  8. mysql_select_db("nazwa_bazy", $con);
  9. mysql_query("SET CHARSET utf8");
  10.  
  11. $result = mysql_query("SELECT FROM_UNIXTIME(htime,'%H:%i') htime, hwindSpeed, hprecipIntensity, htemperature, hcloudCover, hprecipProbability FROM prognoza_godzinowa WHERE htime >= UNIX_TIMESTAMP(UTC_DATE()) AND htime <= UNIX_TIMESTAMP(UTC_DATE() + INTERVAL 1 DAY) AND hid_miasto='".$_GET['hid_miasto']."'") or die(mysql_error());
  12. while($row = mysql_fetch_array($result)) {
  13. $data[] = $row;
  14. }
  15. print json_encode($data);
viking
Korzystałeś z mysqli. Dlaczego zmieniłeś na stare 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.