Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Czas o godzine za dużo
Forum PHP.pl > Forum > Przedszkole
loofkens
Może dla wielu z was problem jest banalny ale dla mnie początkującego nie do ugryzienia. Mianowicie chodzi mi o to że do wyniku dopisywana jest jedna godzina i nie wiem jak to ugryść. Zaznacze że wstawiam np.5 i powinno być 00:12:00 a jest 01:12:00
CODE
<?php
$wynik = (round(3600/$_POST['predkosc']));
$a = date("H:i:s",$wynik);
echo 'czas - '.$a;
?>

Kombinowałem na różne sposoby i szukałem w kilku miejscach i dalej nie wiem o co kaman. Czy moglibyście mi to wytłumaczyć dlaczego tak się dzieje. Z góry dziękuje
marcus753
przerób sobie ten skrypt

  1. <?php
  2. $godzina = date("H");
  3. $godzina++;
  4. $data= date("Y.m.d ".$godzina.":i:s");
  5. ?>
wookieb
Popraw strefę czasową http://pl.php.net/manual/pl/function.date-...imezone-set.php
Pawel_W
ee nie bardzo rozumiem co ten skrypt ma robić, mógłbyś to wyjaśnić?
nospor
@marcus grunt to dobre obejscie winksmiley.jpg

mozesz tez uzyc:
http://pl2.php.net/manual/pl/function.gmdate.php

ps: swoją drogą faktycznie dziwny ten skrypt
loofkens
Obiekt w ciągu 1 godziny pokonuje np.5 pól. wynikiem jest ile czasu potrzebuje na pokonanie 1 pola
marcus753
ten skrypt ma za zadanie dodać jedną godzine i przypisać pełną date wraz z godziną do zmiennej...
loofkens
przy wstawieniu np 5 ma mi dać wynik 12 minut. tutaj data nie jest mi potrzebna gdyż tylko czas jest mi potrzebny do dalszych obliczeń smile.gif
wookieb
1) funkcja obsłuży ci czas maksymalnie do 24h
2) Takie coś to sie liczy poprzez zwykła matematyke
  1. <?php
  2. $h=floor($czas/3600);
  3. $m=floor($czas/60);
  4. $s=$czas%60;
  5. ?>
Pawel_W
Cytat(wookieb @ 16.06.2009, 20:37:36 ) *
1) funkcja obsłuży ci czas maksymalnie do 24h
2) Takie coś to sie liczy poprzez zwykła matematyke
  1. <?php
  2. $h=floor($czas/3600);
  3. $m=floor($czas/60);
  4. $s=$czas%60;
  5. ?>


no troche to popsułeś bo np dla 3600 wyszłoby mu 1h 60 minut i 0s...

treba to zrobić tak:
  1. <?php
  2. $h=floor($czas/3600);
  3. $czas-=$h*3600;
  4. $m=floor($czas/60);
  5. $czas-=$m*60;
  6. $s=$czas;
  7. ?>
Wicepsik
  1. <?php
  2. $_POST['predkosc'] = 3650;
  3.    function _Time($czas)
  4.    {
  5.            $minut = sprintf("%02d", floor($czas / 60) % 60);
  6.            $sekund = sprintf("%02d", floor($czas) % 60);
  7.            $godzin = sprintf("%02d", floor($czas / (60 * 60) % 24));
  8.  
  9.            return $godzin . ':' . $minut . ':' . $sekund;
  10.    }
  11.    
  12.    
  13.    echo _Time($_POST['predkosc']);
  14. ?>
loofkens
Przepraszam panowie i panie że się jeszcze raz powtórze. Naprawde ze mnie jest amator w php. Umieszcze dokładnie o co mi chodzi.
CODE
<form method="post" action="">
Podaj prędkość jednostki(co jednocześnie jest ilością przebytych pól w ciągu 1 godziny)<br />
Prędkość<input type="text" name="predkosc" maxlength="2" size="1"/><br />
<input type="submit" value="Oblicz" />
</form>
<?php
$wynik = (round(3600/$_POST['predkosc']));
$a = date("H:i:s",$wynik);
echo 'Twoja prędkość to '.$_POST['predkosc'];
echo '<br>Przebycie 1 pola zajmuje '.$a;
?>

Jak dla mnie czyli nawet nie przedszkolaka podany skrypt jest prosty.
1. Podaje zmienną
2. zaokrąglam(sekundy dziele przez zmienną)
3. format wyświetlenia (pozwólcie że to tak nazwe)
4. wypisanie wyniku
Niby proste a jednak nie u mnie wyskakuje zawsze źle.
Rozumiem że zapis skryptu może budzić zastrzeżenia ale jak na laika to i tak całkiem nieźle.
Co to bedzie jak wynik tego skryptu bede chciał wstawić do nastepnego sad.gif ale to może innym razem.
ArekJ
  1. <?php
  2. $predkosc = $_POST['predkosc'];
  3. $godziny = floor(3600/$predkosc);
  4. $minuty = floor((3600/$predkosc)/60);
  5. $sekundy = floor(((3600/$predkosc)/60)/60);
  6. ?>

Może tak? Chociaż nie wiem czy coś nie pomieszałem - za dużo jakoś dzielenia mi wyszło. Sorki zmęczony jestem.

EDIT: zamieniłem funkcję round() na floor()
slewin
skoro masz pole forma ograniczone do 2 miejsc to podawaj to w sekundach lub tylko minutach .Max czas przebycia jednego pola to 3600/99=36sekund lub 0,6 minuty ! dodaj jeszcze funkcje aby nie dzieliło przez zero oraz liczby mniejsze od zera .
Kod
$wynik_sek = (round(3600/$_POST['predkosc']));
$wynik_min = $wynik_sek/60;
echo 'Twoja prędkość to '.$_POST['predkosc'];
echo '<br>Przebycie 1 pola zajmuje '.$wynik_sek.' sekund';
echo '<p> lub '.$wynik_min.' minut </p>';
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.