NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: PHP date, odpočítavanie a zobrazovanie

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Marek Burda
Člen
Avatar
Marek Burda:7.8.2017 10:41

Ahoj.
Mám čas z databáze ktorý zobrazuje ukončenie práce.

date("H:i:s",strtotime($row['action_exp']))

Prihlásenému užívateľovi chcem zobraziť koľko času ešte bude pracovať takže vlastne čas z db - aktálny čas.
Rád by som tiež tento čas samozrejme každú sekundu aktualizoval. To budem musieť robiť cez ajax prepdokladám. Máte nejaké nápady ako by mal presne vyzerať syntax vypočítania tohoto času a následne jeho výpis a aktualizácia každú sekundu ?

Ešte upozornujem že časov je tam oveľa viac čiže používam tento výpis vo while (fetch_assoc).

A ešte jedna prosba na záver - Ak ste niekto niečo podobné robili, tiež by som rád zobrazil nejaké políčko ktoré by sa postupne vyplňovalo záležiac na čase samozrejme. Ked sa práca dokončí, bude pole plne vyfarbené no nenapadá my aký systém by som tam mohol využiť. Ďakujem za rady

 
Odpovědět
7.8.2017 10:41
Avatar
Odpovídá na Marek Burda
Neaktivní uživatel:7.8.2017 11:01

Riešenie cez AJAX bude pri viacerých časoch a každú sekundu extrémne náročné. Budeš rád, ak ti server potiahne pár používateľov.

Jediná možnosť, ktorá pripadá do úvahy je použiť JavaScript. Istotne sa nájde nejaká knižnica, ktorá to zvládne.

Nahoru Odpovědět
7.8.2017 11:01
Neaktivní uživatelský účet
Avatar
Marek Burda
Člen
Avatar
Marek Burda:7.8.2017 11:10

Dobre teda, A čo ten syntax odpočítania času ? Aktuálny - tento z db a jeho výpis ? :)

 
Nahoru Odpovědět
7.8.2017 11:10
Avatar
Odpovídá na Marek Burda
Neaktivní uživatel:7.8.2017 11:15

Na začiatku ten čas pošli ku klientovi presne tak ako ho máš uložený v DB a v browseri ho potom budeš počítať, či už nejakou knižnicou alebo si spravíš funkciu.

Nahoru Odpovědět
7.8.2017 11:15
Neaktivní uživatelský účet
Avatar
Marek Burda
Člen
Avatar
Marek Burda:7.8.2017 11:16

Ešte jedina mimotoázka :) Ako selectnem počet užívateľov z db ktorý majú posledný login do siedmych dní ? Takže vlastne niečo takéto ?

$sql5   = "SELECT * FROM tb_users WHERE last_login>NOW() do 7 dní";

Last login je čas kedy sa naposledy prihlásil. Ja chcem získať počet ľudí, čo sa na stránku prihlásili za posledných 7 dní :) Hľadám to už pol hodinku na gooogli ale nikde nevidím možnosť nastaviť ,,o´´

 
Nahoru Odpovědět
7.8.2017 11:16
Avatar
Odpovídá na Marek Burda
Neaktivní uživatel:7.8.2017 11:23

V PHP mám napísanú takúto funkciu:

    function sub($interval, $datetime = '') {

        if(empty($datetime))
            $datetime = $this->now();

        $time = strtotime('-' . $interval, strtotime($datetime));
        return date($this->format, $time);

    }

napr.

sub('7 day', time);  // Odpocita 7 dni

ale dá sa to aj priamo v mysql query:

SELECT * FROM tb_users WHERE last_login >= DATE_SUB(NOW(), INTERVAL 30 DAY)

// Pre istotu tu dám celú triedu z PHP lebo tá funkcia sama o sebe nefunguje :D

<?php

/*
 * wrinche. Modern, powerful and user friendly CMS.
 * Computes date and time in MySQL format.
 * Version: 0.1.4
 * Authors: lamka02sk
 */

namespace App\Helpers;

class DateTime {

    /**
     * @var string
     * Default datetime format
     */
    public $format = 'Y-m-d H:i:s';

    /**
     * @param string $format
     * Change the result datetime format
     * @return bool
     */
    public function setFormat(string $format) {

        $this->format = $format;
        return true;

    }

    /**
     * @return false|string
     * Return current datetime
     */
    public function now() {

        return date($this->format);

    }

    /**
     * @param        $interval
     * @param string $datetime
     * Subtract interval from current datetime
     * @return false|string
     */
    public function sub($interval, $datetime = '') {

        if(empty($datetime))
            $datetime = $this->now();

        $time = strtotime('-' . $interval, strtotime($datetime));
        return date($this->format, $time);

    }

    /**
     * @param        $interval
     * @param string $datetime
     * Add interval to current time
     * @return false|string
     */
    public function add($interval, $datetime = '') {

        if(empty($datetime))
            $datetime = $this->now();

        $time = strtotime('+' . $interval, strtotime($datetime));
        return date($this->format, $time);

    }

}
Editováno 7.8.2017 11:25
Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
Nahoru Odpovědět
7.8.2017 11:23
Neaktivní uživatelský účet
Avatar
Jiří Fencl
Člen
Avatar
Odpovídá na Marek Burda
Jiří Fencl:7.8.2017 11:24

To nebudes potrebovat v php, kdyz to posles na zacatku jak pise Samuel - vytisknes klientovi v php do nejake JS promenne, pripadne jako atribut nejakeho prvku, pak udelas u klienta setInterval a v nem odectes od planovaneho aktualni cas, vytisknes pomoci JS

 
Nahoru Odpovědět
7.8.2017 11:24
Avatar
Marek Burda
Člen
Avatar
Marek Burda:7.8.2017 11:36

Urobil som to jednoducho cez select - tam potrebujem selecnuť tieto veci len na titulnej stránke takže nato nepotrebujem takéto zložité funkcie :) Selectujem tam počet online hráčov, počet registrovaných a počet aktívnych. Predošlé veci som už mal ale tu nastal problém no ten interval pomohol :) Ono keby som to vedeľ ako sa to volá tak to nájdem hned :D Ale už budem vedieť do budúcnosti no :) Ďakujem

 
Nahoru Odpovědět
7.8.2017 11:36
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.