Visualizzazione risultati 1 fino 18 di 18

Discussione: [PHP] Mostrare contenuto dopo una certa data

  1. #1
    Guest

    Predefinito [PHP] Mostrare contenuto dopo una certa data

    Ciao a tutti, allora vorrei fare questo script:
    Alla data prestabilita ($data) e dopo quella data venga mostrato un contenuto se invece la $data è minore di quella di oggi allora mostra un messaggio!
    Una specie di messaggio a natale che rimanga sempre dopo quel giorno in poche parole!
    Codice PHP:
    <?php
    $data
    = "17/06/2009";
    if(
    date("d/m/Y") >= $data) { echo "Ancora troppo presto!"; exit(); }
    ?>
    // contenuto della pagina
    Solo che non riesco a farlo funzionare... a voi funziona? Se impostate la $data minore a quella di oggi [date()] vi mostra il messaggio di errore o il "contenuto"?
    Grazie mille...ciao Davide! ^^"

  2. #2
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Date() restituisce una stringa.
    Su questo tipo di dato gli operatori hanno un comportamento particolare: il confronto avviene tenendo conto dell'ordine dei caratteri codificati ASCII.
    Tu devi invece operare sul timestamp: mktime() ti fornisce un valore numerico corrispondente ad una certa data, e rende quindi tutto più semplice.
    Ciao!
    Ultima modifica di programmazioned : 17-06-2009 alle ore 23.22.24

  3. #3
    Guest

    Predefinito

    Codice PHP:
    <?php
    $data
    = "20090617";
    if(
    date("Ymd") >= $data) { echo "Ancora troppo presto!"; exit(); }
    ?>
    // contenuto della pagina

    Ciao!

  4. #4
    Tyranitar non è connesso Neofita
    Data registrazione
    24-04-2005
    Messaggi
    5

    Predefinito

    Alemoppo mi sa che sbagli, tu crei il timestamp della data e poi la confronti con la data, cioè confronti una stringa in formato timestamp (es. 1245277767) con una data in formato gg/mm/aa (es. 17/08/08)

    La cosa corretta da fare sarebbe trasformare entrambe le data in unix timestamp e poi confrontarle:
    Codice:
    <?php
    $data = '17/08/08';
    list($giorno, $mese, $anno) = explode('/',$data);
    $data_timestamp = mktime(0, 0, 0 , $mese, $giorno, $anno);
    //ritorna il timestamp unix della data passata come argomento
    
    $adesso_timestamp = time();
    //ritorna il timestamp unix corrente
    
    
    if($adesso_timestamp >= $data_timestamp) {
      echo "Ancora troppo presto!"; exit(); 
    }else {
      echo 'Va bene';
    }
    ?>

  5. #5
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da Tyranitar Visualizza messaggio
    Alemoppo mi sa che sbagli, tu crei il timestamp della data e poi la confronti con la data, cioè confronti una stringa in formato timestamp (es. 1245277767) con una data in formato gg/mm/aa (es. 17/08/08)
    E' da tanto che ho cancellato, perché riguardandolo mi sembrava che alla fine quello di debug fosse corretto... Ma adesso che ci riguardo non mi sembra ... perché date() {come AVEVO scritto} restituisce una stringa e NON il timestamp: quindi si confronta la stringa con un timestamp

    ...lasciando stare questo, SEMPRE come avevo detto prima, non dovrebbe essere così ??

    Codice PHP:
    <?php
    $array
    = explode("/","18/06/09");

    if(
    time() < mktime(0, 0, 0, $array[1], $array[0], $array[2]))
    {
    echo
    "Ancora troppo presto!";
    exit();
    }
    //contenuto della pagina
    ?>
    vorrei mettere l'attenzione su questa riga:

    if(time() < mktime(0, 0, 0 , $array[1], $array[0], $array[2]))

    ...Per logica, non dovrebbe essere minore ??

    Ciao!
    Ultima modifica di alemoppo : 18-06-2009 alle ore 01.20.11

  6. #6
    Tyranitar non è connesso Neofita
    Data registrazione
    24-04-2005
    Messaggi
    5

    Predefinito

    Si per logica dovrebbe essere minore...
    Ho sbagliato a mettere il maggiore...
    Sarebbe giusto se il tempo si decrementasse ogni secondo che passa invece di incrementarsi :-P

  7. #7
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Rileggete la richiesta di sim, vi siete fatti prendere troppo dal codice ;)
    Comunque, sebbene io ritenga decisamente migliore a livello di leggibilità la soluzione che si sta sostenendo in diversi post, quello di debug mi sembra giusto come ragionamento, nonostante confesso di aver inizialmente ignorato la possibilità di usare una soluzione simile.
    Evidentemente stiamo riflettendo a livello di programmazione a tipizzazione statica forte, conoscendo magari linguaggi come c/c++, java, ecc.
    Dobbiamo ricordare che PHP converte automaticamente dati di diverso tipo a runtime nel caso sia necessario: probabilmente nel nostro caso $data è trasformata in valore numerico, e viene fatto un confronto con il corrispondente numerico della data attuale formattata secondo il pattern.
    Pure nel caso non si effettui alcuna conversione ma si tenga conto del semplice ordine ascii nel confronto stringa-stringa, quel codice dovrebbe funzionare.
    Ciao!
    Ultima modifica di programmazioned : 18-06-2009 alle ore 01.50.49

  8. #8
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Dobbiamo ricordare che PHP converte automaticamente dati di diverso tipo a runtime nel caso sia necessario: probabilmente nel nostro caso $data è trasformata in valore numerico, e viene fatto un confronto con il corrispondente numerico della data attuale formattata secondo il pattern.
    ...Ecco perché avevo cancellato il mio messaggio...
    E poi debug è debug: non sbaglia mai
    Anzi, ha sbagliato nel "maggiore o uguale"{almeno credo...}

    Ciao!

  9. #9
    programmazioned non è connesso Utente attivo
    Data registrazione
    25-03-2008
    Messaggi
    440

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    E poi debug è debug: non sbaglia mai
    mmh...non ci provare
    Anzi, ha sbagliato nel "maggiore o uguale"{almeno credo...}
    Non hai riletto il primo post come ti avevo detto, sim vuole poter mostrare quel messaggio da una certa data in poi...
    Ciao!

  10. #10
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Non hai riletto il primo post come ti avevo detto, sim vuole poter mostrare quel messaggio da una certa data in poi...
    Ciao!
    allora che senso ha la scritta "Ancora troppo presto ?"...

    Quindi debug ha fatto un lavoro perfetto

    Vado e chiudo, altrimenti i MOD mi uccidono perché ho scritto cose inutili...

    Ciao!

  11. #11
    Guest

    Predefinito

    Ma provare prima di parlare mai eh!


    Ciao!

  12. #12
    Guest

    Predefinito

    Ok...ma io e debug abbiamo scritto QUASI la stessa cosa...Grazie! ^^
    Unico problema: se io setto la data di oggi (18) mi viene mostrato il messaggio "ancora troppo presto"...perchè? Deve mostrare il contenuto ... = non funziona!!! XD
    Codice PHP:
    <?php
    $data
    = "2009/06/18"; $d = explode("/",$data); $d = $d["0"].$d["1"].$d["2"];
    if(
    date("Ymd") >= $d) { echo "Ancora troppo presto!"; exit(); }
    ?>

  13. #13
    Guest

    Predefinito

    Al posto di >= metti < (non avevo notato questo errore nel primo post).
    EDIT: puoi anche fare a meno di quell'explode e di tutta la manfrina per ricostruire la data in una stringa comparabile. Oltre all'esempio che ti ho postato ieri, puoi anche togliere direttamente gli slash tramite str_replace('/','',$data)


    Ciao!
    Ultima modifica di debug : 18-06-2009 alle ore 12.50.57

  14. #14
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Citazione Originalmente inviato da programmazioned Visualizza messaggio
    Non hai riletto il primo post come ti avevo detto, sim vuole poter mostrare quel messaggio da una certa data in poi...
    Ciao!

    Visto che avevo ragione io

    ...Comunque debug dice di fare una cosa del genere:

    Codice PHP:
    <?php
    $data
    = str_replace("/","","2009/06/18");
    if(
    date("Ymd") < $data) { echo "Ancora troppo presto!"; exit(); }
    ?>
    Ciao!

  15. #15
    Guest

    Predefinito

    Ok...Grazie debug! ^^" Non mi era passato in testa minimamente l'str_replace!!
    Ciauuu! ^^"

    PS. alemoppo quando non capisce cosa dice lo dico! t.t Non c'è bisogno che me lo scrivi tu...grazie cmq ma non serviva! O.o

  16. #16
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Visto che avevo ragione io

    ...Comunque debug dice di fare una cosa del genere:

    Codice PHP:
    <?php
    $data
    = str_replace("/","","2009/06/18");
    if(
    date("Ymd") < $data) { echo "Ancora troppo presto!"; exit(); }
    ?>
    Ciao!
    La discussione è vecchia però vorrei chiedere una cosa. Come faccio a fare in modo che in quella data (18/06/2009) mi mostri ad esempio "Ciao"?

  17. #17
    L'avatar di alemoppo
    alemoppo è connesso ora Staff AV
    Data registrazione
    24-08-2008
    Residenza
    PU / BO
    Messaggi
    22,762

    Predefinito

    Oddio che discussione vecchia.

    Beh, una cosa così?
    Codice PHP:
    <?php
    $data
    = str_replace("/","","2009/06/18");
    if(
    date("Ymd") == $data) { echo "Ciao"; exit(); }
    ?>
    Comunque rifai una tua nuova discussione e spiega bene ciò che vuoi ottenere.

    Ciao!
    Ultima modifica di alemoppo : 30-12-2016 alle ore 20.16.40

  18. #18
    Guest

    Predefinito

    Citazione Originalmente inviato da alemoppo Visualizza messaggio
    Oddio che discussione vecchia.

    Beh, una cosa così?
    Codice PHP:
    <?php
    $data
    = str_replace("/","","2009/06/18");
    if(
    date("Ymd") == $data) { echo "Ciao"; exit(); }
    ?>
    Comunque rifai una tua nuova discussione e spiega bene ciò che vuoi ottenere.

    Ciao!
    Ciao grazie della risposta, ci sono riuscito. :D

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •