Newsgroup: it.comp.www.php
Titolo: Da stringa a data

Salve NG,
Ho guardando in rete ho trovato come trasformare una data in qualsiasi altra
cosa, ma non come trasformare una stringa in una data. Temo di aver fatto
un po' di confusione con mkdate, date, strtotime, ecc.
Ricavo una stringa da un database (dbase) cosi' fatta:
20030713174244 
Come la converto in una data?
Grazie, Nicola.
-- 
chi va pian va san e va lontan

"NicoKid" <
Pnic...@quargentan.com
 > ha scritto nel messaggio
news:8focib...@10.3.0.80...

con getdate()
$stringa="20030713174244";
$data_format=getdate($stringa);
echo"$data_format[mday]/$data_format[mon]/$data_format[year]";
otterrai giorno/mese/anno
ciao

spacebar wrote:

Si, ma ottengo sta' roba.
19/1/2038
Sembra che getdate non sia contento del formato di questa stringa (2038 mi
puzza da overflow).
Idee ?
Grazei, Nicola.


 spacebar wrote:
per curiosità da dove ottieni una data in quel formato e soprattutto 
come l'hai memorizzata? non è un timestamp di nessun formato...
normalmente questo è sufficiente
$Data='2003-07-13 17:42:44';
echo(date("d-m-Y H:i:s",strtotime($Data)));
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo è contro la guerra

 echo(date("d-m-Y H:i:s",strtotime($Data)));
E' una tabella dbase III in teoria, in pratica e' mezza dbase IV, e il file
ha pure l'estensione .cdb invece di .dbf. Avevo postato qui' una news a
riguardo. Il file viene manipolato da winzozz con un programma creato con 
Factory Link (ne sconsiglio caldamente l'impiego). Sfortuna vuole che chi
ha fatto il programma ha pensato bene di memorizzare il campo in formato
numerico invece che usare il formato data di dbase. Questo perche' serve
anche ora, minuti e secondi.
Pensate che dovro' creare una funzione per aggiungere '-' o '/' in mezzo
alla stringa con la data?
Grazie, Nicola.


E' una tabella dbase III in teoria, in pratica e' mezza dbase IV, e il file
ha pure l'estensione .cdb invece di .dbf. Avevo postato qui' una news a
riguardo. Il file viene manipolato da winzozz con un programma creato con
Factory Link (ne sconsiglio caldamente l'impiego). Sfortuna vuole che chi
ha fatto il programma ha pensato bene di memorizzare il campo in formato
numerico invece che usare il formato data di dbase. Questo perche' serve
anche ora, minuti e secondi.
Pensate che dovro' creare una funzione per aggiungere '-' o '/' in mezzo
alla stringa con la data?
oopps
trattasi di timestamp di mysql
prova cosě
$d="20030713174244";
$anno=substr($d,0,4);
$mese=substr($d,4,2);
$giorni=substr($d,6,2);
$ore=substr($d,8,2);
$minuti=substr($d,10,2);
$secondi=substr($d,12,2);
$timestamp_unix=mktime($ore,$minuti,$secondi,$mese,$giorni,$anno);
echo $timestamp_unix;
echo'il timestampo di unix<br>';
$data_format=getdate($timestamp_unix);
echo"$data_format[mday]/$data_format[mon]/$data_format[year]&nbsp;$data_form
at[hours]:$data_format[minutes]:$data_format[seconds]";
echo'la data formattata';
ciao

 $d="20030713174244";
se č un timestamp di mysql basta utilizzare il date format di mysql....
data una tabella 'tabella' con un campo 'data' (TIMESTAMP)
con
SELECT (DATE_FORMAT(data,'%d-%m-%Y %H:%i:%s')) as DataFormattata FROM 
tabella
accedi a DataFormattata direttamente nel formato che ti interessa
Ciao Gianfranzo
-- 
ICQ#: 21258924
Nick Gianfranzo
Home page 
http://www.gianfranzo.it
Gianfranzo č contro la guerra

 
no, come puoi leggere qui' sopra non si tratta di mysql. Comunque il metodo
di spacebar funge egregiamente.


 echo'la data formattata';
Grazie, questo e' quello che cercavo :))


 Grazie, questo e' quello che cercavo :))
sempre che non ci siano date tipo:
200311111
1-1-2003 01:01:01


 Ciao Gianfranzo
Non credo che ci siano date di questo tipo,
altrimenti, a partire dalla stringa seguente
2003111111
nessuno saprebbe distinguere se si tratta di
2003-01-01 01:01:11
2003-01-01 01:11:01
2003-01-01 11:01:01
2003-01-11 01:01:01
2003-11-01 01:01:01
E' ovvio che per le date in quel formato la' i numeri ad una sola cifra
vengano preceduti da uno 0.
Ciao,
Ema

 1-1-2003 01:01:01
Al momento non mi pare, speriamo :P.


 vengano preceduti da uno 0.
è ovvio per te.... ho visto cose ben peggiori... e non ho ancora capito 
da dove vengono pescate quelle date, né come sono state generate per 
cui... tutto potrebbe essere, se ha garanzia del formato YYYYMMDDHHIISS 
allora funziona sempre... volevo solo mettere la pulce nell'orecchio


 $anno=substr($d,0,4);
Secondo me in questo caso una regexp dovrebbe essere piu' veloce di 6
chiamate a funzione.
Qualcosa tipo (non testato):
$r = eregi("([0-9]{4})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})([0-9]{2})", $d, $res);
Poi ti trovi $res[0] che e' l'anno, $res[1] il mese, ecc. ecc.
Bye.

 20030713174244 
<?php
$stringa="20030713174244";
list($anno,$mese,$giorno,$ore,$minuti,$secondi) = 
sscanf($stringa,"%04s%02s%02s%02s%02s%02s");
echo "$giorno/$mese/$anno $ore:$minuti:$secondi";
?>
----
Le proposte sono sempre capite dagli altri in maniera diversa da come le 
concepisce chi le fa.

 ?>
Anche questa e' una idea :)


Alessandro Pellizzari wrote:

Anche questo funzia, pero' $res[0] contiene tutta la stringa, l'anno e'
$res[1].
Se e' piu' veloce uso questa :)
