Errore stampa data inferiore ad un periodo

Il seguente metodo:

Date("d-m-Y",strtotime($record['data']));

permette di stampare la data in formato italiano.

Quando inserisco la data attraverso un'apposito form, al momento della stampa, se la data inserita inferiore al 02/01/1970, compare il seguente errore nel campo data

<br/><b>Warning</b>:
date(): Windows does not support dates prior to midnight (00:00:00),
January 1, 1970 in <b>scheda.php</b> on line <b>253</b><br />

Qualcuno sa dirmi per quale motivo?

Grazie,

ciao.

inviato 10 anni fa
Nando
X 0 X

strtotime restituisce il timestamp associato alla data fornita. Il timestamp di una data il numero di secondi trascorsi dalla mezzanotte del 1/1/1970 pertanto una data precedente ha un timestamp negativo.

Windows non gestisce timestamp negativi quindi il PHP restituisce l'errore che hai riportato.

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Come posso risolvere allora questo problema, su mysql le date sono in formato inglese e fin qui va bene, ma, quando le stampa a video nel mio applicativo che sto realizzando le vorrei in formato italiano, questo metodo strtotime l'unico che sono riuscito a trovare in giro e che mi hanno consigliato in tanti, mi hanno anche detto di lasciarla in formato inglese ma per il cliente un problema. Non ci credo che non ci sia un metodo per risolvere questo problema, purtroppo io sono solo agli inizi della programmazione php.

Mi sapresti aiutare?

Grazie,

ciao.

risposto 10 anni fa
Nando
X 0 X

Puoi risolvere il problema direttamente nell'SQL, lasciando che sia MySQL a formattare correttamente la data nel formato che preferisci.

MySQL infatti ha diverse funzioni per la manipolazione delle date, tra queste c' DATE_FORMAT che puoi usare in questo modo:

SELECT DATE_FORMAT(nome_campo_data, '%d/%m/%Y') FROM ...

per i dettagli vedi qui:

http://dev.mysql.com/doc/refman/5.0/en/date-and-time-functions.html

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

In questa maniera va meglio, ma c' solo un problema, devo inserire uno per uno tutti i campi da stampare, faccio un esempio:

SELECT DATE_FORMAT(campo_data,'%d/%m/%Y') AS data,id,nome,cognome FROM anagrafica;

Non c' un modo per evitare di andare ad inserire tutti questi campi?

Grazie tante per l'aiuto, sei molto gentile. :)

risposto 10 anni fa
Nando
X 0 X

Non necessario, basta fare cos:

SELECT DATE_FORMAT(campo_data,'%d/%m/%Y') AS data_formattata, * FROM anagrafica;

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Non funziona, ho provato prima su mysql direttamente e mi restituisce il seguente errore:

Errore di sintassi nella query SQL vicino a '* from anagrafica' linea 1

risposto 10 anni fa
Nando
X 0 X

Sorry :P

prova cos:

SELECT *, DATE_FORMAT(campo_data,'%d/%m/%Y') AS data_formattata FROM anagrafica;

:bye:

risposto 10 anni fa
Gianni Tomasicchio
X 0 X

Ok, adesso funziona, ti ringrazio tanto per l'aiuto.

:bye:

risposto 10 anni fa
Nando
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda