Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP]Operacje matematyczne na czasie trwania (nie chodzi o obliczanie daty)
icamtuff
post
Post #1





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.06.2017

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


Będąc marnej jakości początkującym programistą natknąłem na problem obliczania czasu i operacji matematycznych na nim. Mam na myśli podanie czasu trwania (wstępnie do 24h max) i skrócenie tego czasu o pół, o 10%, o 25% itd. itp.

Wymodziłem sobie taki prosty formularz gdzie użytkownik podaje trzy elementy czasu czyli godziny, minuty i sekundy:

  1. Hours: <input type="text" name="eta_h" value="0" /><br />
  2. Minutes: <input type="text" name="eta_m" value="0"/><br />
  3. Seconds: <input type="text" name="eta_s" value="0" /><br /><hr />


Następnie wybiera wartość procentową o ile ma być ten czas skrócony:
  1. <input type="radio" name="bType" value="0.25"checked> 25%<br>
  2. <input type="radio" name="bType" value="0.5"> 50%<br>


Zbieram dane (na razie GETem) i wymodziłem coś takiego korzystając z jednego z przykładów znalezionego gdzieś w czeluściach Internetu:
  1. $strStart = '2001-01-01 00:00';
  2. $strEnd = '2001-01-01 '.$_GET['eta_h'].":".$_GET['eta_m'].":".$_GET['eta_s'];
  3.  
  4. $dteStart = new DateTime($strStart);
  5. $dteEnd = new DateTime($strEnd);
  6. $dteDiff = $dteStart->diff($dteEnd);


Teraz mam problem dalej bo np. gdy chciałbym skrócić ten czas o 10% lub 1/3 to wszystko działa bardzo fajnie jeśli podam czas/datę jakąś dużą czyli 16 godzin bo jeśli chcę przyciąć czas dwudziestu minut o np 25% to widzę, że jest to traktowane jako godzina 0:20 (dwadzieścia po północy), a nie po prostu dwadzieścia minut:

  1. $boostType = $_GET['bType'];
  2.  
  3. $timePOSIX = strtotime($format);
  4.  
  5. $a = $timePOSIX;
  6. $b = $boostType;
  7. echo "<br/>";
  8. echo date("H:i:s",$a-$a*$b);


Wypluwa mi:
  1. 00:20:00
  2.  
  3. 06:15:00


zamiast 15 minut.

Czy ktoś może mi wyłożyć i wbić do łba co robię źle w moim procesie myślowym, jak ten problem ugryźć i przede wszystkim rozwiązać? Bo coś mi się wydaje, że źle biorę się za rozwiązanie problemu. Prosiłbym też o łopatologiczne wyjaśnienie i pomoc.

Z góry dziękuję za pomoc (IMG:style_emoticons/default/smile.gif)

Ten post edytował icamtuff 14.06.2017, 11:24:53
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
icamtuff
post
Post #2





Grupa: Zarejestrowani
Postów: 4
Pomógł: 0
Dołączył: 14.06.2017

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


Cytat(Pyton_000 @ 14.06.2017, 11:23:49 ) *
No i odpowiedziałeś sobie sam na swój problem.

Musisz mieć 2 funkcjie:
- konwertującą do sekund (https://stackoverflow.com/questions/4834202/convert-time-in-hhmmss-format-to-seconds-only)
- konwertującą do godzin (https://stackoverflow.com/a/20870843/3732803)

Zamieniasz na sekundy, wyliczasz, konwertujesz, wyświetlasz.

Ok, spróbuję ale czy to czasem znowu mi nie wypluje jakiejś godziny szóstej rano gdy podam 20 minut?


EDIT: chyba wiem w czym problem miałem - trzeba przyjąć jako "bazę" początkowy start POSIXowy czyli pierwszy stycznia '70 s strefie UTC. Dlatego strtotime() wyrzucał mi jakieś dziwne wyniki bo to było interpretowane jako rok 2017, a 25% z 47 lat (od 70 do 17) to 12 lat... :/

Ten post edytował icamtuff 14.06.2017, 11:32:00
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 8.10.2025 - 17:58