Newsgroup: it.comp.www.php
Titolo: Re: Probelmi con le date...

 timestamp(14). Come mai???? Sto impazzendo per cercare di farlo funzionare
echo mktime();
-- 
www.iuz-lab.info




tieni presente che il campo DATE in (ad es.) mySQL, è del tipo anglosassone: 
1970-01-01
occhio con le date, perché mktime prima del gennaio 1970 (epoca UNIX) o se 
non sbaglio dopo il 2034 (da delle prove che avevo fatto credo fosse quello 
l'anno) non funziona...
Quindi, ti dico come avevo fatto io:
if(($year>=1970) && ($year <= 2034)    {
// vai di mktime
}
else    {
// chiamata a una funzione che ho disegnato, senza dubbio più lenta, per 
comparare le date
}

echo mktime();
Facendo un echo del 1/1/2005 mi da come valore:  1104534000
Dovrebbe essere corretto

 1970-01-01
ma il valore restituito da mktime() posso inserirlo in un campo timestamp di
mysql giusto?

La query risultante mi sembra giusta:
 INSERT INTO `offerte` ( `Id` , `Categoria` , `Destinazione` , `Tipo` ,
`Pensione` , `Durata` , `DataPartenza` , `DataScadenza` , `LuogoPartenza` ,
`Prezzo` , `Informazioni` , `Foto` , `DocPdf` , `InHomePage` ) VALUES ( '',
'1', 'd', 'd' , 'd' , 'd' , '1104534000' , '1104534000' , 'd' , 'd' , 'd',
'', '', '0' );
I due valori 1104534000 equivalgono al 1/1/2005. Però il db non li accetta e
mette 0000000000... tutti gli altri campi funzionano.
mktime() e timestamp non sono "compatibili" come forma?


Prova con:
INSERT INTO `offerte` ( `Id` , `Categoria` , `Destinazione` , `Tipo` ,
`Pensione` , `Durata` , `DataPartenza` , `DataScadenza` , `LuogoPartenza` ,
`Prezzo` , `Informazioni` , `Foto` , `DocPdf` , `InHomePage` ) VALUES ( '',
'1', 'd', 'd' , 'd' , 'd' , 1104534000 , 1104534000 , 'd' , 'd' , 'd',
'', '', '0' );
Non ho mai usato il tipo timestamp di mySql, di solito uso un intero, ma 
dovrebe essere la stessa cosa: sono numeri, non stringhe, quindi gli 
apici non servono.
-- 
Mauro
------------------------------
Be Happy: drink Beer!
http://www.birraiolo.it
------------------------------

 ha scritto nel messaggio
news:OB6pd.397151$35.17...@news4.tin.it...

E' successo anche a me le prime volte che smanettavo con PHP/MySql, basta
che metti il campo come intero, lo scrivi usando i valori di mktime() e per
riprendere la data usa date("d/m/Y",$valore_campo_db) ad esempio.
Ciao!
-- 
Keeper

 Ciao!
Si infatti misa che farň propriocosě come mi avete suggerito tu e Mauro
perchč continua a darmi valori assurdi con timestamp anche se adesso riesco
ad inserirli nel db. L'intero di quante cifre dovrei usarlo, 10?
Adesso provo, grazie

Oh finalmente, cosě funziona! grazie!

 di farlo funzionare
[...]
Fai attenzione che il campo TIMESTAMP di MySQL è diverso dal
timestamp restituito dalla funzione mktime().
La funzione mktime() restituisce un numero intero pari al
numero di secondi trascorsi a partire dal 01/01/1970, mentre
il campo TIMESTAMP(14) di MySQL è una stringa del tipo:
"yyyymmddhhiiss".
Pertanto se vuoi salvare un Unix timestamp devi usare un campo
INT, mentre se vuoi usare un campo TIMESTAMP di MySQL devi
creare la stringa adatta attraverso la funzione date()
$data = date('Ymdhis');
Se in un campo TIMESTAMP si tenta di memorizzare un valore non
corretto, MySQL inserirà la stringa "00000000000000".
Ulteriori informazioni sui campi per le dati in MySQL:
http://dev.mysql.com/doc/mysql/en/DATETIME.html
Ciao.
-- 
Federico R.

 
http://dev.mysql.com/doc/mysql/en/DATETIME.html
Ah ecco è quello che immaginavo.... sono 2 variabili che hanno una forma
diversa. Certo che anche loro potevano con un nome uguale mantenere la
stessa forma di dato :|
Ma la soluzione migliore qual'è? Usare un int per memorizzare una data o un
timestamp (in mysql)?

 un timestamp (in mysql)?
IMHO invece di mktime(); è meglio usare date(); con timestamp[mySQL]..
reimposta il formato a timestamp ed usa date('YmdHis');
-- 
www.iuz-lab.info

 reimposta il formato a timestamp ed usa date('YmdHis');
Ma maledizione!!!!! Adesso sto provando così come dici... allora creo il mio
timestamp (php) in questo modo:
$PartenzaTime = date('Ymdhis',
mktime(0,0,0,$MesePartenza,$GiornoPartenza,$AnnoPartenza));
Faccio un echo della variabile e mi viene giusto:  20050101120000 che
rispecchia "yyyymmgghhmmss" del timestamp mysql.
Faccio la mia INSERT INTO e non mi salva il valore corretto, ho provato sia
mettendo $PartenzaTime che '$PartenzaTime' nella query

*Fabio* wrote:

posta il codice interessato (la h dovrebbe essere maiuscola H)..
-- 
www.iuz-lab.info

 memorizzare una data o un timestamp (in mysql)?
Personalmente mi trovo bene con il TIMESTAMP di MySQL (o i
suoi analoghi DATATIME, DATE, TIME).
Ciao.
-- 
Federico R.

 ha scritto nel messaggio
news:XBhpd.215118$b5.10...@news3.tin.it...

Quello standard di 11 cifre va benissimo.
Ci tenevo a far notare una cosa:
il tipo "timestamp" di mysql č cosě: yyyymmddhhmmss
cioč anno mese giorno ore minuti secondi ed č per questo che ti trovavi
degli zeri, mktime ritorna appunto un timestamp UNIX cioč i secondi dal
primo del 1970 se non erro...
Ciao!
-- 
Keeper

Corretto tutto adesso mi funziona con una data e non con l'altra perchè mi
inserisce sempre now() come valore.... azz :(
Nella struttura del db non c'è da nessuna parte che il valore debba essere
now... tantomeno nel codice della pagina.
Però ricordo che quando ho creato all'inizio il db avevo messo che, come
valore di default per DataPartenza, fosse inserito now().... adesso però non
compare + (di default c'è NULL ) dove cavolo lo vado a pescare?

E tra l'altro se provo a modificare il default inserendo ad esempio
20050110000000 non me lo fa cambiare!
Strana 'sta cosa....

TROVATO RISOLTO!!!!

Come non detto... non ho risolto niente...
Ogni volta che inserisco $PartenzaTime mi fa una NOW().... ho provato
persino a cancellare il campo nella tabella e ricrearne un altro ma mi da
sempre NOW() quando inserisco un valore. E sempre e solo su uncampo sul
secondo campo no.... perchč mai? L'unica soluzione che mi viene in mente č
mettere un campo timestamp in + e uno lasciarlo inutilizzato visto che ci
inserisce sempre now()....
E' capitato anche a qualcun'altro???

 E' capitato anche a qualcun'altro???
E' MOLTO NORMALE come comportamento.
Il primo timestamp in una tabella viene aggiornato in automatico (appunto, fa
uno time stamp ;-) ), e serve per verificare veloce ultimi aggiornamenti in
una tabella senza aggiungere codice alla query [1].
Dovresti usare datetime come campo per vari motivi:
Piu facile da gestire e leggere, puoi fare piu' facilmente aritmetica con le
date [2]. Datetime funziona anche con date prima del 1970 e dopo il 2038.
Error comune con timestamp, la differenza tra due timestamp senza usare
UNIX_TIMESTAMP() non rappresenta secondi.
[1] 
http://dev.mysql.com/doc/mysql/en/TIMESTAMP_pre-4.1.html
[2] 
http://dev.mysql.com/doc/mysql/en/Date_and_time_functions.html

 ha scritto:

non sono analoghi

 non sono analoghi
Sì, è vero. Mi sono espresso male.
Ciao.
-- 
Federico R.