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

Discussione: timestamp

  1. #1

    timestamp

    Ciao,

    ho una tabella con un campo 'data' nel quale è memorizzata la data nel formato '2003-09-30', sto cercando di trasformarla nel suo timestamp indipendentemente dall'orario che potrebbe essere alle ore 16,00.

    Come posso fare?

    ho provato in questo modo, ma mi riporta sempre il 1° Gennaio del 1970:


    while ($riga = mysql_fetch_array($risultato))

    {

    $id = $riga['id'];
    $data=$riga['data'];
    $mkt=mktime($data);
    $descrizione=$riga['descrizione'];

    //$query2 = mysql_query("UPDATE primanota SET data = '$mkt' WHERE id = '$id' ") or die(mysql_error());

    echo "
    ". "Aggiornamento id :" . $id . " " . $mkt
    ." data ".$data." ".$descrizione." "."
    ";
    }


    per tutti i record mi ritorna sempre questo timestamp 1154510384 anche se le date non sono le stesse, dove sbaglio?

    Grazie

  2. #2
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    ciao. La funzione mktime non prende come argomento una data nel formato in cui la passi tu ma richiede ore,minuti,secondi,mese,giorno,anno.
    http://se.php.net/manual/it/function.mktime.php
    Quindi la data che recuperi dal db dovresti prima esploderla nelle tre componenti.

    Quindi
    2003-09-30

    diventerebbe
    $timestamp = mktime(0,0,0,9,30,2003)

    tuttavia non c'è bisogno di fare questo lavoro visto che in mysql c'è la funzione
    unix_timestamp che ti restituisce lo stesso identico timestamp

    quindi puoi fare

    select unix_timestamp(campo_data) from tabella

  3. #3
    Originariamente inviato da nicola75ss
    ciao. La funzione mktime non prende come argomento una data nel formato in cui la passi tu ma richiede ore,minuti,secondi,mese,giorno,anno.
    http://se.php.net/manual/it/function.mktime.php
    Quindi la data che recuperi dal db dovresti prima esploderla nelle tre componenti.

    Quindi
    2003-09-30

    diventerebbe
    $timestamp = mktime(0,0,0,9,30,2003)

    tuttavia non c'è bisogno di fare questo lavoro visto che in mysql c'è la funzione
    unix_timestamp che ti restituisce lo stesso identico timestamp

    quindi puoi fare

    select unix_timestamp(campo_data) from tabella

    genialee
    ciao

  4. #4
    ciao,

    ho inserito questo codice per trasformare la data di tutti i record della tabella, ma sicuramente ho commesso qualche errore perchè mi ha modificato tutte le date a '000-00-00'

    riporto il codice:

    <?

    /* Modifica campo data dell'intera tabella convertendo
    la data da YYYY/mm/dd in formato Timestamp */

    // *** connessione al db ***

    $db=mysql_connect('localhost','root','');
    if ($db==false)
    die("Errore nella connessione.");

    // *** selezione db ***

    mysql_select_db('registro', $db)
    or die("Errore nella selezione del database.");

    // *** creazione query ***

    $query = mysql_query("SELECT * FROM primanota");

    // *** inserimento tabella in $riga ***

    $riga = mysql_num_rows($query) + 1;

    // *** Cilco della tabella ***

    while ($riga = mysql_fetch_array($query))

    {
    // *** ricava 'id' e pone in $id ***

    $id = $riga['id'];

    // *** ricava 'data' e pone in $data

    $data=$riga['data'];

    // *** crea query per aggiornamento 'data' ***

    $query2 = mysql_query("UPDATE primanota SET data = 'unix_timestamp(data)' WHERE id = '$id' ") or die(mysql_error());

    // *** visualizza il record che aggiorna ***

    echo "
    ". "Aggiornamento id :" . $id . " "
    ." data ".$data."
    ";

    // *** esce dal ciclo ***
    }

    // *** chiude la connessione al db ***

    mysql_close($db);

    ?>

    grazie.

  5. #5
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Ciao. Il tuo problema dipende dal fatto che tenti di convertire il campo "al volo".
    Dovresti aggiungere un campo alla tabella nel quale andrai ad inserire il timestamp relativo a ciascuna data.

    una query del tipo
    update primanota set campo_timestamp = unix_timestamp(campo_data) where id = $id;

    a questo punto puoi anche cancellare il campo nel formato data visto che non avrebbe senso tenere nella tabella due dati in formato diverso ma pur sempre identici.

  6. #6
    ho inserito un altro campo 'timestamp' con formato timestamp

    mi da questo timestamp

    1147431879

    per tutti i record, credo sia quello del momento perchè ogni volta che provo aumentano le ultime due cifre:


    // *** crea query per aggiornamento 'data' ***

    $query2 = mysql_query("update primanota set timestamp = unix_timestamp(data) where id = '$id'")
    or die(mysql_error());

  7. #7
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Scusa,che versione stai utlizzando di mysql?

    Prova a definire il campo nel formato int(10), altrimenti come hai notato ti setta il campo al momento attuale.
    Nelle versioni più recenti un campo di tipo timestamp è equivalente al formato datetime.

  8. #8
    sto usando easyphp1.8 che è omnicomprensivo.

    adesso sto cercando di aggirare l'ostacolo ricavando separatamente dalla 'data' d, m e Y per inserirli nella funzione mktime.

    Credi vada bene?

  9. #9
    Utente di HTML.it L'avatar di nicola75ss
    Registrato dal
    Nov 2004
    Messaggi
    12,923
    Originariamente inviato da francodace
    sto usando easyphp1.8 che è omnicomprensivo.

    adesso sto cercando di aggirare l'ostacolo ricavando separatamente dalla 'data' d, m e Y per inserirli nella funzione mktime.

    Credi vada bene?
    Scusa, ma hai provato a fare come ti ho detto, e cioè ad aggiungere nel db il campo in cui memorizzi il timestamp e a metterlo di tipo int(10) anzichè timestamp.
    Così risolvi senza bisogno di dover passare da php.
    easyphp 1.8 non so che versioni di mysql utilizzi.
    per saperlo basta che lanci la query

    select version();

  10. #10
    ho inserito il campo come mi hai detto, 'time_stamp' INT '11'

    le versioni di cui dispone easyphp1.8:

    MySQL: 4.1.9
    PHP: 4.3.10

    Struttura della tabella `primanota`

    `id` int(10) NOT NULL default '0',
    `data` date default NULL,
    `time_stamp` int(11) default '0',
    `vocespesa` varchar(50) default NULL,
    `descrizione` varchar(80) default NULL,
    `entrate` decimal(9,2) default NULL,
    `uscite` decimal(9,2) default NULL,
    `saldo` decimal(9,2) default NULL,
    PRIMARY KEY (`id`),

    come posso inviare direttamente la query di update per tutti i record in mysql?

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.