• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Countdown w JavaScripcie ze zmiennymi z PHP.

Object Storage Arubacloud
0 głosów
436 wizyt
pytanie zadane 27 listopada 2015 w PHP przez reCAPCHTA hater Początkujący (380 p.)

Witam serdecznie. Mam bardzo wielką prośbę. :-)
Nie będę ściemniał. Jestem w trakcie tworzenia gry przeglądarkowej [RPG via www].
Od kilku ostatnich miesięcy, męczę się z jedną cholerną funkcją.

Co chcę zrobić?
Chcę wysłać postać na tak zwaną wyprawę. Wyprawa trwa [x] minut.
Na stronie wyświetlałby się Timer odliczający do końca wyprawy. No, chyba że, np. ktoś by ją zakończył wcześniej.
( opcjonalnie: chciałbym dodać animowany progressbar pokazujący postęp z aktualnej wyprawy, ale to tylko bajerek, więc nie musi być)

Teraz tak... do bazy danych lądują dwie wartości. [kiedy zaczął] oraz [kiedy skończy] wyprawę.
Dla pierwszej wartości przypisuję obecny czas, np:
 

<?php
//start misji
$start = time();
?>

dzięki tej funkcji dostaniemy aktualny czas w sekundach. Uważam ten rodzaj podawania czasu za dobry, ponieważ łatwo jest mając taki uchwyt, stworzyć inną datę, np [kiedy skończy].
 

<?php
// Kiedy skończy...
$koniec = $start + ( 10*60 );
// koniec = aktualny czas + 10razy 60 sekund
?>

Jeżeli teraz od zmiennej $koniec odejmę zawartość zmiennej $start, otrzymamy ilość sekud która została do końca wyprawy.
Mam tutaj teraz Timer w JS, trochę już przerobiony i chciałbym jego dwóm zmiennym [var end = ...] oraz [var now = ...] przpisać te zmienne z PHP które stworzyłem. Te zmienne będą wynikiem z zapytania do MySql, gdzie podane będzie [kiedy zaczął] oraz [kiedy skończy].
 

<script>
var end = new Date('02/19/2016 10:1 AM');

    var sekundy = 1000;
    var minuty = sekundy * 60;
    var godziny = minuty * 60;
    var dni = godziny * 24;
    var timer;

    function showRemaining() {
        var now = new Date();
        var distance = end - now;
        if (distance < 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / dni);
        var hours = Math.floor((distance % dni) / godziny);
        var minutes = Math.floor((distance % godziny) / minuty);
        var seconds = Math.floor((distance % minuty) / sekundy);

        document.getElementById('countdown').innerHTML = days +' : '+ hours +' : '+ minutes +' : '+ seconds;
    }

    timer = setInterval(showRemaining, 1000);
</script>
<div style="font-size: 36px; color: #f00;" id="countdown"></div>

Za kupę kasy kupiłem sobie książki do nauki PHP i MySQL. W jednej z nich napisane jest parę przykładów jak wpisywać i wyciągać datę z Bazy, ale z niczym się mają do tego co ja potrzebuję. Nie wiem jak np używając formatu ISO 8601 czyli mając np taki wpis [2015-12-15T12:00:30+11:00], mógłbym w jakikolwiek sposób, dodać czy odejmować minuty.
Męczę się z tym od długich miesięcy, na Ajaxie nie znam się w ogóle, przerabiam setki skryptów, obejrzałem z tysiąc filmików jak zrobić Timer'a ale żaden nie był choć troszkę pomocny, do tego czego potrzebowałem.
Teraz, jeśli będzie taka potrzeba, to jestem w stanie nawet zapłacić, za ... nie za gotowca, a za szczegółowe wyjaśnienie jak takie operacje na czasie i dacie powinny wyglądać.

Bardzo proszę o w miarę szybką odpowiedź. Już jestem łysy, bo z nerwów wyrwałem sobie wszystkie kudły.
Pozdrawiam bardzo serdecznie :-)

3 odpowiedzi

0 głosów
odpowiedź 27 listopada 2015 przez migacz100 Mądrala (5,410 p.)
Czyli mam rozumieć, że chodzi o wyciągnięcie daty z czasem startu i daty z czasem końca i na tej podstawie zrobienia timera odliczającego czas wyprawy?
komentarz 27 listopada 2015 przez reCAPCHTA hater Początkujący (380 p.)
Nie czas wyprawy, tylko czas do końca wyprawy
komentarz 27 listopada 2015 przez efiku Szeryf (75,160 p.)

Jeśli w PHP to klasa DateTime   ( zapraszam do manuala) ,  lub lib Carbon

Dodatkowo musisz wiedzieć jak działa http, wtedy zrozumiesz ze musisz sobie jakies api zrobić dla gry i odbierać "ajaxem". https://symfony.com/doc/current/book/http_fundamentals.html

0 głosów
odpowiedź 27 listopada 2015 przez Magicone Nałogowiec (45,100 p.)

Makar(ony)ena w kodzie, w zasadzie nie powinno się tak robić, ale skoro musisz:

<?php
	echo '<script>var timeEnd = ', time() + $czas_wyprawy_w_sekundach_ofc, ';</script'>;
?>

<script>
	var yourInterval = setInterval(function() {
		var dif = timeEnd - Math.floor(Date.now() / 1000); //ilosc sekund, jaka pozostala do konca

		if(dif <= 0) {
			clearInterval(yourInterval);
			//tu robisz cokolwiek, jak skonczy sie wyprawa
		}
		else {
			//tu robisz cokolwiek, jesli wyprawa trwa
		}
	}, 1000);
</script>

 

komentarz 27 listopada 2015 przez efiku Szeryf (75,160 p.)
<?=  "<script>var timeEnd = ". time() + $czas_wyprawy_w_sekundach_ofc . "</script>" ?>

Ale nie, nie róbmy tak, 2015 przecież ;)

komentarz 27 listopada 2015 przez reCAPCHTA hater Początkujący (380 p.)
No jak to tak? Przecież się tak nie da! Jak do zmiennej timeEnd możesz dać time(), skoro time() to aktualny czas?
Koniec nigdy nie bedzie miał miejsca?
komentarz 28 listopada 2015 przez Magicone Nałogowiec (45,100 p.)
@efik ok, wybacz :(

@reCAPTCHA_hater do zmiennej timeEnd dajesz aktualny czas + dlugosc wyprawy wyrazona w sekundach :)
0 głosów
odpowiedź 27 listopada 2015 przez reCAPCHTA hater Początkujący (380 p.)

Myślałem bardziej o czymś takim:
 

<script>
var end = '<?php // Kiedy koniec pobrane z MySql ?>';

    var sekundy = 1000;
    var minuty = sekundy * 60;
    var godziny = minuty * 60;
    var dni = godziny * 24;
    var timer;

    function showRemaining() {
        var now = '<?php // aktualny czas, czyli time(); ?>';
        var distance = end - now;
        if (distance < 0) {

            clearInterval(timer);
            document.getElementById('countdown').innerHTML = 'EXPIRED!';

            return;
        }
        var days = Math.floor(distance / dni);
        var hours = Math.floor((distance % dni) / godziny);
        var minutes = Math.floor((distance % godziny) / minuty);
        var seconds = Math.floor((distance % minuty) / sekundy);

        document.getElementById('countdown').innerHTML = days +' : '+ hours +' : '+ minutes +' : '+ seconds;
    }

    timer = setInterval(showRemaining, 1000);
</script>
<div style="font-size: 36px; color: #f00;" id="countdown"></div>

 

Podobne pytania

0 głosów
2 odpowiedzi 753 wizyt
pytanie zadane 6 lipca 2016 w PHP przez Radekol Bywalec (2,880 p.)
0 głosów
2 odpowiedzi 165 wizyt
pytanie zadane 17 listopada 2018 w PHP przez Mavimix Dyskutant (8,390 p.)
0 głosów
3 odpowiedzi 457 wizyt
pytanie zadane 29 grudnia 2016 w PHP przez Ditrix Mądrala (5,650 p.)

92,570 zapytań

141,422 odpowiedzi

319,643 komentarzy

61,958 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj.

Akademia Sekuraka

Kolejna edycja największej imprezy hakerskiej w Polsce, czyli Mega Sekurak Hacking Party odbędzie się już 20 maja 2024r. Z tej okazji mamy dla Was kod: pasjamshp - jeżeli wpiszecie go w koszyku, to wówczas otrzymacie 40% zniżki na bilet w wersji standard!

Więcej informacji na temat imprezy znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...