Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Funkcja zwracająca różnicę procentową - GODZINA DNIA
designez
post 20.11.2016, 12:55:40
Post #1





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


Hej wydaje mi się to bardziej matematyczne zadanie ale proszę o wskazówki jak to najlepiej rozwiązać.
Mam taką oto klasę której zadaniem jest zwracanie wartości od 0 do 180 co jest wartością jaką potrzebuję do "Półkolistego paska postępu" takiego jak tutaj.
Poniższa klasa nie działa prawidłowo ponieważ jest już przygotowana pod wartości procentowe a dziś np. dzień trwa 8 godzin co nigdy nie zwróci w obecnym stanie pełnej wartości "180"




Mam już wszystko brakuje mi tylko mechanizmu który oblicza wartość procentową aktualnej godziny do ilości godzin od wschodu do zachodu.
Długość dnia zimą i latem jest różna więc nei może być to stała.

Długość dnia 8 godzin i kombinuje jak sprawdzić ile procent dnia stanowi godzina 11 przy wchodzie 8 i zachodzie 16?

  1. function WschodZachodRoznica () {
  2. $godzina = date('h');
  3. $_wschod = ''.date_sunrise(time(), SUNFUNCS_RET_STRING, 54.06, 19.65, 90, 1);
  4. $_zachod = ''.date_sunset(time(), SUNFUNCS_RET_STRING, 54.06, 19.65, 90, 1);
  5. $_dlugosc_dnia = $_zachod - $_wschod;
  6.  
  7. if ($godzina>$_wschod) {
  8. if (($godzina-$_wschod)==1) {
  9. return "18";
  10. }
  11. if (($godzina-$_wschod)==2) {
  12. return "36";
  13. }
  14. if (($godzina-$_wschod)==3) {
  15. return "54";
  16. }
  17. if (($godzina-$_wschod)==4) {
  18. return "72";
  19. }
  20. if (($godzina-$_wschod)==5) {
  21. return "90";
  22. }
  23. if (($godzina-$_wschod)==6) {
  24. return "108";
  25. }
  26. if (($godzina-$_wschod)==7) {
  27. return "126";
  28. }
  29. if (($godzina-$_wschod)==8) {
  30. return "144";
  31. }
  32. if (($godzina-$_wschod)==9) {
  33. return "162";
  34. }
  35. if (($godzina-$_wschod)==10) {
  36. return "180";
  37. }
  38. } else {
  39. return "0";
  40.  
  41. }
  42.  
  43. }


Ten post edytował designez 20.11.2016, 13:03:11
Go to the top of the page
+Quote Post
nospor
post 20.11.2016, 13:12:13
Post #2





Grupa: Moderatorzy
Postów: 36 455
Pomógł: 6292
Dołączył: 27.12.2004




Przekombinowales...

skoro znasz stark i koniec, to liczysz roznicy
$roznica = $koniec - $start; //w minutach rzecz jasna

Teraz masz jakas godzine i liczesz roznice dla niej
$roznica2 = $godzina - $start; //w minuach rzecz jasna

I teraz procent

$procent = $roznica2/roznica*100;


--------------------

"Myśl, myśl, myśl..." - Kubuś Puchatek || "Manual, manual, manual..." - Kubuś Programista
"Szukaj, szukaj, szukaj..." - Kubuś Odkrywca || "Debuguj, debuguj, debuguj..." - Kubuś Developer

Go to the top of the page
+Quote Post
trueblue
post 20.11.2016, 13:17:44
Post #3





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Temat: PHP Wzor na funkcje

a*x+b=y

/a*8+b=0
\a*16+b=180


--------------------
Go to the top of the page
+Quote Post
designez
post 20.11.2016, 19:29:50
Post #4





Grupa: Zarejestrowani
Postów: 77
Pomógł: 0
Dołączył: 11.08.2012

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


Dzięki za podpowiedzi rozwiązałem to tak jak sugerujecie. Dla testów podawałem sobie godziny jako wartości w zmiennych.

  1. function WschodZachodRoznica () {
  2. /*$godzina = date('H');
  3. $_wschod = ''.date_sunrise(time(), SUNFUNCS_RET_STRING, 54.06, 19.65, 90, 1);
  4. $_zachod = ''.date_sunset(time(), SUNFUNCS_RET_STRING, 54.06, 19.65, 90, 1);
  5. $_dlugosc_dnia = $_zachod - $_wschod;
  6.  
  7. */
  8. $godzina_t = 17*60;
  9. $_wschod = 8*60;
  10. $_zachod = 18*60;
  11. $roznica = $_zachod - $_wschod;
  12. $roznica2 = $godzina_t - $_wschod;
  13. $procent = $roznica2/$roznica*100;
  14. $_int_procent = (int)$procent;
  15.  
  16. //$_css_output = (int)$procent*1.8;
  17. $_css_output = $procent*1.8;
  18. if ($godzina_t>$_wschod) {
  19. if ($godzina_t<=$_zachod) {
  20. return $_css_output;
  21. } else {
  22. return 180;
  23. }
  24. } else {
  25. return 0;
  26. }
  27.  
  28. }
Go to the top of the page
+Quote Post
trueblue
post 20.11.2016, 19:53:02
Post #5





Grupa: Zarejestrowani
Postów: 6 761
Pomógł: 1822
Dołączył: 11.03.2014

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


Mnożyć przez 60 nie musisz, bo to i tak stała, która nie zmienia wyniku. Również zamiast 100 i 1.8, można pomnożyć przez 180.

kat=(180/(Z-W))*G-180.
Zamiast warunków na wschód i zachód można nałożyć warunki na wyliczoną wartość kąta.

Ten post edytował trueblue 20.11.2016, 21:17:33


--------------------
Go to the top of the page
+Quote Post
rybosom
post 26.05.2019, 12:15:46
Post #6





Grupa: Zarejestrowani
Postów: 82
Pomógł: 0
Dołączył: 6.09.2004

Ostrzeżenie: (20%)
X----


a propos date_sunset

  1. <?php
  2. // Współrzędne Warszawy w stopniach dziesiętnych
  3. // szerokość: 52.2297700°
  4. // długość: 21.0117800°
  5. // zenith: ~= 90
  6. // offset: +2 GMT
  7.  
  8. echo date_sunset(time(), SUNFUNCS_RET_STRING, 52.2297700, 21.0117800, 90, 2);
  9. ?>

zwraca dziś tj 26 maja 2019 godzinę 20:35 podczas gdy Google twierdzi że zachód słońca będzie o 20:40



no i pytanie, skąd ta różnica?

Ten post edytował rybosom 26.05.2019, 12:16:31
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: 24.04.2024 - 03:03