Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 25
  1. #1

    Timestamp che non mi funziona

    Salve, devo fare delle operazioni con le date e le ore e devo necessariamente convertire i valori in timestamp, siccome il codice non ha funzionato subito, mi sono esercitata un pò con il codice creando questo piccolo esempio che, ovviamente, neanche questo funziona e non sò dove sbaglio.
    Come vedete imposto la data e l'ora in due variabili, li converto in timestamp, mostro a video data e ora impostata ed il timestamp ottenuto.
    Poi mostro a video il timestamp convertito in forma leggibile e mi aspetto di trovare i valori impostati ossia 15,02,1970 12,50,12 ed invece mi trovo un valore che cambia di volta in volta che premo F5 il che mi fa capire che c'è qualcosa che non va ma non sò cosa.
    Mi sapere dare qualche consiglio?
    Grazie.
    Ms.


    codice:
    $strdata="02,15,1970"; //imposto la data
    $strora="12,50,12"; //imposto l'ora
    $timestamp=mktime($strora,$strdata); //converto tutto
    echo "$strdata
    ";//mostro la data impostata
    echo "$strora
    "; //mostro l'ora impostata
    echo "$timestamp
    "; // mostro il timestamp
    echo date("d,m,Y H,i,s", $timestamp); //converto il timestamp in forma leggibile

  2. #2
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Il problema è che passi a mktime una stringa, devi passagli degli interi.

    $timestamp = mktime(12,50,12,2,15,1970);
    echo "$timestamp
    ";
    echo date("d,m,Y H,i,s", $timestamp);

  3. #3
    Immaginavo.
    Il problema è che le date e l'ora li devo recuperare da un database Mysql per cui mi ritornato sottoforma di stringa tipo array ossia:
    $risultato[data] contenente la data in questo formato 2001-01-02
    $risultato[ora] contenente l'orario in questo formato 12:15:00

    Come li posso inserire nella funzione mktime(??,??,??,??,??,????);

    Grazie mille.
    Ms.

  4. #4
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Codice PHP:
    $data explode("-",$risultato['data']); //metti sempre gli apici per l'indice dell'array
    $ora explode(":",$risultato['ora']);

    $timestamp mktime($ora[0],$ora[1],$ora[2],$data[1],$data[2],$data[0]); 

  5. #5
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    NUOOOOOOooooOOOOooOooo oO o OOoO OO oO O OO o oO oOOOO o OO oo Oo oo


    Codice PHP:
    $format "Y-m-d H:i:s" ;
    $date date_create_from_format($format,$dateUnixString) ;
    echo 
    $date->getTimestamp(); 
    Impariamo ad usare la classe dateTime !!!!

    Questa e' l'applicazione ibrida, prodeurale per la creazione dell'oggetto dateTime e OOP per il successivo utilizzo dei metodi della classe.
    Ma nessuno ti vieta di fare
    Codice PHP:
    $date DateTime::createFromFormat($format,$dateUnixString); 
    che sarebbe ancora meglio !

    cmq : http://www.php.net/manual/en/datetim...fromformat.php

  6. #6
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Scusa, ma che problema c'è nell'usare la funzione mktime() ?
    Non è che sia sbagliato eh.

  7. #7
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    no infatti non e' sbagliato e non c'e' alcun problema sintattico nell'utilizzare tale procedura.

    Il fatto e' che e' bene abituarsi ad usare la classe dateTime che e' stata introdotta in PHP.
    E' una classe davvero potente che fornisce finalmente una layer unificato per la gestione delle date. Hai un sacco di metodi per eseguire tutte le operazioni che necessiti sulle date.

    A mio qvviso quindi e' meglio utilizzare questa classe piuttosto che vecchie funzioni tipo mktime etc... funzioni che richiedono laboriose operazioni sulle stringhe di data nonche' un sacco di controlli ....

    Se ti arrivasse una data in formato sbagliato che succederebbe nel codice suggerito ?
    La create from format :
    Return Values
    Returns a new DateTime instance or FALSE on failure.

  8. #8
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Originariamente inviato da Virus_101
    ...
    Se ti arrivasse una data in formato sbagliato che succederebbe nel codice suggerito ?
    La create from format :
    Esttamente la stessa cosa
    mktime() returns the Unix timestamp of the arguments given. If the arguments are invalid, the function returns FALSE (before PHP 5.1 it returned -1).

  9. #9
    Utente di HTML.it L'avatar di Virus_101
    Registrato dal
    Sep 2008
    Messaggi
    2,497
    Assolutamente vero per la funziona MA non per il codice precedente :

    Codice PHP:
    $data explode("-",$risultato['data']); //metti sempre gli apici per l'indice dell'array
    $ora explode(":",$risultato['ora']); 
    se il formato e' sbagliato gli explode daranno risultati inattesi ....
    => ERRRORE e date 1-1-1970 .... sinceramente ... non va bene, preferisco usare la classe dateTime che dover sbroccare a fare funzioni che facciano millioni di controlli .... ci sono gia' non voglio re-inventare la ruota.

    Come detto sono soluzioni simili, ma la tua richiede un sacco di codice prima.... che puo' generare problemi come quanto detto sopra.

    pensa a quanto piu' pulito e veloce e' questo approccio

    Codice PHP:

    $pattern 
    '/^[0-9]{4}\\-[0-9]{2}\\-[0-9]{2}\\ [0-9]{2}\\:[0-9]{2}\\:[0-9]{2}$/' ;
    $format  "Y-m-d H:i:s" ;

    if( !
    preg_match$pattern,$date ) )
    { die(
    "FORMATO DATA ERRATO!") ; }

    $myDate DateTime::createFromFormat($format,$date) ;

    $timestamp $myDate->getTimestamp(); 
    IN qggiunta in questo caso hai una classe che ti da a disposizione tutta una serie di metodi per la gestione dela data in questione, puoi sommare, sottrarre, gestire formati, calcolre differenze etc etc etc etc etc etc etc..... e tutto lanciando gli opportuni metodi.

    Capisco che vuoi difendere la tua soluzione, ma come soluzione andava bene prima di php 5 e piu' precisamente :

    The DateTime class
    (PHP 5 >= 5.2.0)

  10. #10
    Moderatore di PHP L'avatar di Alhazred
    Registrato dal
    Oct 2003
    Messaggi
    12,505
    Ho semplicemente mantenuto l'idea iniziale rispondendo a quella, non mi interessa difendere una soluzione, si sta solo discutendo.

    Anche con mktime() si può gestire l'errore, altrimenti non ritornerebbe false in caso se ne presentasse uno.

    Se i dati restituiti dai 2 explode risultassero inattesi
    Codice PHP:
    $timestamp mktime($ora[0],$ora[1],$ora[2],$data[1],$data[2],$data[0]);
    if(!
    $timestamp)
    {
        echo 
    "formato data non valido";
    }
    else
    {
        echo 
    "$timestamp
    "
    // mostro il timestamp
        
    echo date("d,m,Y H,i,s"$timestamp); //converto il timestamp in forma leggibile

    risolve il problema.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.