Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP] Różnica stringów
Forum PHP.pl > Forum > Przedszkole
IMP
Siema

Kolejny moj topic z seri jestem n00bem i zadaje glupie pytania haha.gif
Zazna od początku:

Napisalem proste forum i chcialbym wprowadzic edycje postow w zaleznosci od daty ich umieszczenia. W bazie danych mam pole `data` VARCHAR(19) a data ma postac RRRR:MM:DD GG:MM:SS
Potrzebuje wiedziec jaka roznica czasu jest pomiedzy opublikowaniem posta a data obecna.

Ktos ma jakies propozycje?
ayeo
Chcesz to robić w PHP czy na poziomie zapytania do bazy?
nevt
na początek... popraw strukturę bazy danych i zmień pole data na typ DATETIME...
potem poszukaj w manualu MySQL opisu funkcji DATEDIFF(...) i już będzie z górki ...

powodzenia.
IMP
  1. mysql> SELECT DATEDIFF('1997-12-31 23:59:59','1997-12-30');
  2. -> 1
  3. mysql> SELECT DATEDIFF('1997-11-30 23:59:59','1997-12-31');
  4. -> -31


Znalalem tam taki oto przyklad.

Tylko nie wiem zabardzo co mam wsadzic w miejsce zmiennych: DATEDIFF(expr1,expr2)

To jest moj pomysl:

  1. <?php
  2. $query = 'SELECT date FROM posts WHERE id="'.$id_postu.'"';
  3. $result = mysql_query($query);
  4. $data1 = mysql_result($result,0,"date");
  5. $data2 = date(Y-m-d H:i:s);
  6. $query2 = 'SELECT DATEDIFF($data1, $data2)';
  7. // i co teraz query2 jest moja roznica?
  8. ?>


Czy jest to poprawne?
Misiur66
Kod
function data2minelo(data){
    //stworz obiekty na date pobrana i aktualna
    var teraz = new Date();
    var wydarzenie = new Date();
    try{
    //dzieli na tablice YYYY-MM-DD i HH:MM:SS
    var dataiczas = data.split(' ');
    //rodziel date na date i czas
    var t_data = dataiczas[0].split('-');
    var t_czas = dataiczas[1].split(':');
    
    //ustaw date i czas wydarzenia
    wydarzenie.setFullYear(t_data[0]);
    wydarzenie.setMonth(t_data[1] - 1);
    wydarzenie.setDate(t_data[2]);
    wydarzenie.setHours(t_czas[0]);
    wydarzenie.setMinutes(t_czas[1]);
    wydarzenie.setSeconds(t_czas[2]);
    }
    catch(e){
        return;
    }
    //oblicz roznice w czasach pomiedzy teraz a wprowadzona data
    var roznica = (teraz.getTime() - wydarzenie.getTime()) / 1000;
    //zapisuje ile minelo czasu
    //jednostki w sekundach
    var minuta = 60;
    var godzina = 60 * 60;
    var dzien = 60 * 60 * 24;
    //oblicza ile minelo dni, godzin, minut, sekund
    var m_dni = Math.floor(roznica/dzien);
    var m_godzin = Math.floor((roznica-m_dni*dzien)/godzina);
    var m_minut = Math.floor((roznica-m_dni*dzien-m_godzin*godzina)/minuta);
    var m_sekund = Math.floor((roznica-m_dni*dzien-m_godzin*godzina-m_minut*minuta));
    //jezeli wynik byl nie dawniej niz 3 dni i nie wczesniej niz 1
    if(m_dni > 1 && m_dni <= 3){
        return m_dni + 'dni temu';
    }
    //jezeli to bylo dzisiaj
    else if(m_dni === 0){
        //jezeli jeszcze nie minela godzina
        if(m_godzin === 0){
            if(m_minut === 0){
                return m_sekund + 's temu';
            }
            else{
                return m_minut + 'm ' + m_sekund + 's temu';
            }
        }
        else{
            return m_godzin + 'h ' + m_minut + 'm temu';
        }
    }
    return t_data[2] + '.' + t_data[1] + '.' + t_data[0] + ' ' + t_czas[0] + ':' + t_czas[1];
}

Ja stosuje JS do takich spraw. Spróbuj i ty!
.radex
JS? To raczej nie jest dobry pomysł. Nie każdy ma JS włączony.

Można stosować JS przy walidacji formularzy (ale i tak trzeba później sprawdzić po stronie serwera), ale tutaj niezbyt.
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.