Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11

Discussione: Date Php Mysql

  1. #1

    Date Php Mysql

    Salve a tutti,

    qual'è il miglior modo, secondo voi, per gestire le date in MySql. Io sono un programmatore JAVA e con JAVA è molto semplice gestire le date quando nel db il campo, ad esempio, è di tipo DATE o TIMESTAMP (data con orario).

    In php ancora non mi è molto chiaro. Ho letto numerosi articoli ma non riesco a trovare la soluzione migliore e più semplice da utilizzare. Io devo memorizzare nel db sia data che orario quindi avevo pensato ad un campo mysql di tipo TIMESTAMP, ma poi come popolo il db da mysql?

    Esempio:

    Ho una query del tipo
    $sql = 'INSERT INTO notizia (idSport, data, dataScadenza, titolo, testo, attiva) VALUES (?, ?, ?, ?, ?, ?)';

    data e dataScadenza sono campi TIMESTAMP. In php che valore devono avere? Io acquisisco tali valori da una classica maschera quindi mi arriva ad esempio 10/03/2008 10:35. Se al posto del secondo punto interrogativo della query ci finisce tale valore, in mysql mi ritrovo un valore 0000-00-00 00:00:00

    Consigli?

    grazie a tutti in anticipo
    Luca

  2. #2
    Le date in formato TIMESTAMP corrispondono al formato anglosassone. E non c'è modo di fargli accettare quelle in formato italiano, mysql è fatto così. Probabilmente è per quello che mysql non riesce ad interpretare i valori che gli passi e ti setta tutto a 0.

    Personalmente quando si tratta di date uso sempre il formato UNIX, trasformando la data tramite date() in un numero. E' molto più semplice per fare operazioni tra le date (capire quanti giorni ci sono da una all'altra etc).

    http://it.php.net/manual/en/function.date.php

  3. #3
    veramente il formato usato da MySQL e' quello ANSI che prevede i valori messi nell'ordine matematico del piu' significativo a sx ed il meno significativo a dx esattamente come si fa con i valori numerici.

    per convertire la data ricevuta dal form in un formato ANSI da inserire in un campo DATETIME di MySQL basta usare explode(), girare la data e poi una ricompattazione.

    Codice PHP:
    function converti_data($data
       {
          
    $divido explode(' 'trim($data));
          
    $data explode('/'$divido[0]);
          
    $data array_reverse($data);
          
    $ora explode(':'$divido[1]);

          return 
    implode('-'$data)." "implode(':'$ora) .":00";
       }
    echo 
    converti_data('24/04/2010 11:40'); 

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Originariamente inviato da piero.mac
    veramente il formato usato da MySQL e' quello ANSI che prevede i valori messi nell'ordine matematico del piu' significativo a sx ed il meno significativo a dx esattamente come si fa con i valori numerici.

    per convertire la data ricevuta dal form in un formato ANSI da inserire in un campo DATETIME di MySQL basta usare explode(), girare la data e poi una ricompattazione.
    Grazie mille per la risposta,

    Perfetta la tua spiegazione ma mi manca un passaggio... come inserisco la data in sql?

    $sql = 'INSERT INTO notizia (idSport, data, dataScadenza, titolo, testo, attiva) VALUES (?, ?, ?, ?, ?, ?)';

    al posto del secondo punto interrogativo (data) metto una stringa del tipo "24/04/2010 11:40"?
    Luca

  5. #5
    Originariamente inviato da sportfantasy
    Grazie mille per la risposta,

    Perfetta la tua spiegazione ma mi manca un passaggio... come inserisco la data in sql?

    $sql = 'INSERT INTO notizia (idSport, data, dataScadenza, titolo, testo, attiva) VALUES (?, ?, ?, ?, ?, ?)';

    al posto del secondo punto interrogativo (data) metto una stringa del tipo "24/04/2010 11:40"?
    Direi di no.

    La conversione devi farla con il php. Salva il risultato della funzione in una variabile invece di stamparlo e poi lo inserisci nella query.

    $ciccio = converti_data('24/04/2010 11:40');

    insert into tabella (data) values ('$ciccio')

    ovviamente saprai tu in quale campo deve essere inserita la data. Metti la variabile tra apici poiche' quella data e' per tutti una stringa ascii.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    Originariamente inviato da piero.mac
    Direi di no.

    La conversione devi farla con il php. Salva il risultato della funzione in una variabile invece di stamparlo e poi lo inserisci nella query.

    $ciccio = converti_data('24/04/2010 11:40');

    insert into tabella (data) values ('$ciccio')

    ovviamente saprai tu in quale campo deve essere inserita la data. Metti la variabile tra apici poiche' quella data e' per tutti una stringa ascii.
    Grazie mille, hai risolto un enigma per me fondamentale. Grazie ancora. Ne approfitto per chiederti un'ultima cosa. Quando leggo una data dal db, ottendo una stringa del tipo "2010-04-24 11:40:00". Naturalmente per stamparla, mi serve convertirla in un formato più adatto alle mie esigenze. Poichè non posso utilizzare la funzione date() che richiede in ingresso il timestamp, hai qualche altra funzioncina già pronta che posso utilizzare, se ricevesse in ingresso il format sarebbe praticamente perfetta.

    Grazie ancora per il prezioso aiuto.
    Luca

  7. #7
    Originariamente inviato da sportfantasy
    Quando leggo una data dal db, ottendo una stringa del tipo "2010-04-24 11:40:00". Naturalmente per stamparla, mi serve convertirla in un formato più adatto alle mie esigenze. Poichè non posso utilizzare la funzione date() che richiede in ingresso il timestamp, hai qualche altra funzioncina già pronta che posso utilizzare, se ricevesse in ingresso il format sarebbe praticamente perfetta.
    La funzione te la da mysql con date_format() che e' l'equivalente mysql del date() php

    select *, date_format(campo_data, '%d/%m/%Y %H:%i:%s') as data_ita from ....

    Qui trovi tutti i fratelli e cugini di date_format()

    http://dev.mysql.com/doc/refman/5.0/...functions.html

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8

    Ma...

    Originariamente inviato da piero.mac
    La funzione te la da mysql con date_format() che e' l'equivalente mysql del date() php

    select *, date_format(campo_data, '%d/%m/%Y %H:%i:%s') as data_ita from ....

    Qui trovi tutti i fratelli e cugini di date_format()

    http://dev.mysql.com/doc/refman/5.0/...functions.html
    Un piccolo problema, io utilizzo un generatore di codice DAO/DTO, quindi non scrivo manualmente il codice che mi permette di leggere i dati dal db. Di conseguenza vorrei intervenire sulla data acquisita, nel momento in cui devo stamparla... Ho fatto una funzioncina ma mi restituisce sempre il formato dd/MM/yyyy oppure dd/MM/yyyy HH:ss... Mi sarebbe piaciuto fare qualcosa di più flessibile

    Grazie mille per l'aiuto
    Luca

  9. #9

    Re: Ma...

    Originariamente inviato da sportfantasy
    Un piccolo problema, io utilizzo un generatore di codice DAO/DTO, quindi non scrivo manualmente il codice che mi permette di leggere i dati dal db. Di conseguenza vorrei intervenire sulla data acquisita, nel momento in cui devo stamparla... Ho fatto una funzioncina ma mi restituisce sempre il formato dd/MM/yyyy oppure dd/MM/yyyy HH:ss... Mi sarebbe piaciuto fare qualcosa di più flessibile

    Grazie mille per l'aiuto
    che significa piu' flessibile?

    se devi convertire dei dati oppure gestirli in qualche modo questi dati devono essere normalizzati altrimenti non puoi di certo gestire tutte le eccezioni possibili che si possono presentare.

    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  10. #10

    ti spiego

    Ti spiego il mio obiettivo...

    Attualmente ho 2 funzioni:

    1) php2mysql riceve in ingresso una data nel formato dd/MM/yyyy e restitusce la data nel formato mysql yyyy-MM-dd HH:mm:ss

    2) mysql2php riceve in ingresso una data nel formato mysql yyyy-MM-dd HH:mm:ss e restitusce la data nel formato dd/MM/yyyy

    Vorrei che tali funzioni fossero parametrizzate con una stringa che rappresenta la formattazione... così come lavora la funzione date() di mysql se non sbaglio... La differenza è che la funzione date() lavora con il timestamp.

    Grazie ancora
    Luca

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.