PHP - Timestamp e date..

Versione Completa   Stampa   Cerca   Utenti   Iscriviti     Condividi : FacebookTwitter
Arkantos01
00sabato 2 giugno 2007 11:53
Problema apparentemente banale, da cui non riesco a venire a capo..
Nel DB MySQL ho un timestamp, faccio la query, lo ricavo, tutto ok. Poi voglio utilizzarlo per ricavarne la data in formato più leggibile. Questo è il codiche che utilizzo:

function traduci($str_old) { 

$inglese=array('Monday','Tuesday','Wednesday','Thursday','Friday','Saturday','Sunday','January','February','March','April','May','June','July','August','September','October','November','December'); 

$italiano=array('Lunedì','Martedì','Mercoledì','Giovedì','Venerdì','Sabato','Domenica','Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre'); 

$str = str_replace($inglese,$italiano, $str_old); 

return $str; 
}

function data($timestamp) {
list($data,$ora) = explode(' ',$timestamp);
list($anno,$mese,$giorno) = explode('-',$data);
list($h,$m,$s) = explode(':',$ora);

setlocale (LC_TIME, "it_IT");
return traduci(date('l',$timestamp)).' '.$giorno.' '.traduci(date('F',$timestamp))/*strftime('%B',$timestamp)*/.' '.$anno.' alle '.$h.'.'.$m;
}


Funziona tutto tranne il mese: mi restituisce sempre Gennaio (o January se non lo traduco o gennaio se uso la funzione strftime..), ma se faccio un print del timestamp il mese è quello giusto.
Il timestamp lo crea MySQL in automatico quanto faccio la query di inserimento (tipo cella timestamp con predefinito current_timestamp).
aessenet
00sabato 2 giugno 2007 19:49
E' davvero curioso [SM=x53911]

Il problema è proprio nell'uso della date, che ritorna January per qualsiasi stringa timestamp gli passi.

La causa potrebbe essere che tu passi a date() un timestamp preso da mysql (es: "2007-01-34.."), che è diverso dal famoso timestamp unix (es: 118080571404, insomma l'output di time() ) che si aspetta la funzione date().

Evidentemente il php si accorge che non gli stai passando un timestamp unix, e tenta di convertire (non so come) il tuo timestamp in quello che gli serve, ottenendo risultati imprevedibili [SM=x53915]

Per fare le cose per bene, ti suggerirei di fare tu la conversione, e passare a date() il timestamp già convertito in numero: per crearlo devi usare mktime (occhio che i parametri mese e giorno non sono nell'ordine in cui ce li si aspetterebbe).
Modificato da aessenet 02/06/2007 19.49
Arkantos01
00domenica 3 giugno 2007 11:37
Re:

Scritto da: aessenet 02/06/2007 19.49
E' davvero curioso [SM=x53911]

Il problema è proprio nell'uso della date, che ritorna January per qualsiasi stringa timestamp gli passi.

La causa potrebbe essere che tu passi a date() un timestamp preso da mysql (es: "2007-01-34.."), che è diverso dal famoso timestamp unix (es: 118080571404, insomma l'output di time() ) che si aspetta la funzione date().

Evidentemente il php si accorge che non gli stai passando un timestamp unix, e tenta di convertire (non so come) il tuo timestamp in quello che gli serve, ottenendo risultati imprevedibili [SM=x53915]

Per fare le cose per bene, ti suggerirei di fare tu la conversione, e passare a date() il timestamp già convertito in numero: per crearlo devi usare mktime (occhio che i parametri mese e giorno non sono nell'ordine in cui ce li si aspetterebbe).
Modificato da aessenet 02/06/2007 19.49



Grazie! Adesso proverò con mktime..
Questo sito ce l'ho su register.it (scelto dal consiglio di amministrazione del circolo, con la vecchia teoria del più pago, migliore è il servizio..), ma sinceramente è quello che mi da più problemi come php.. il sito l'ho sviluppato su netsons.org e sul mio serverino di test (PHP5, Apache 2, Mysql4), testato su di un hosting di ion.it e non avuto problemi.. quando sono andato su register mi sono saltati fuori una miriade di malghini..
Questa è la versione 'lo-fi' del Forum Per visualizzare la versione completa clicca qui
Tutti gli orari sono GMT+01:00. Adesso sono le 18:44.
Copyright © 2000-2024 FFZ srl - www.freeforumzone.com