data

devo salvare una data in un campo mysql(date)ma se dalla form seleziono una data prima del 1970 mi da erroe? perche?

inviato 11 anni fa
havana9
X 0 X

riporta il codice dello script (la parte interessata dall'errore)

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

ho una form con tre caselle giorno mese ed anno, invio questi dati a una pagina php, e li passo alla funzione date,

$giorno=$post['giorno'];

$mese=$_post['mese'];

$anno=$post['anno'];

$data=date(d m y, mktime($giorno,$mese,$anno);(non e la sintassi corretta ma e per farti vedere)

poi la variabile data la inserisco in un campo date su mysql

il problema che quando vado a inserirwe la data nella funzione date mi dice che windows non gestisce date prima della unix epoc 1970, se lo provo on line su un sistema unix mi da lo stesso errore.

come faccio a gestie una data che sia prima della unix epoque

risposto 11 anni fa
havana9
X 0 X

Ci sono diversi errori. Prova così:

$giorno = $_post['giorno'];
$mese = $_post['mese'];
$anno = $_post['anno'];
$data = date('d m y', mktime(0,0,0,$mese,$giorno,$anno);

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

la sintassi l'avevo scritta male nel post che avevo fatto, e cosi come hai scritto ma quando lo lancio mi dice che non puo gestire date che siano minori di 1970(unix epoca)

risposto 11 anni fa
havana9
X 0 X

Perdonami, non avevo letto con attenzione il primo messaggio. La funzione mktime non supporta le date precedenti al 1970 poiché essa restituisce il timestamp di una data, ovvero il numero di secondi trascorsi dal 1 gennaio 1970 (e non restituisce valori negativi)

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

e come faccio agestire una data precedente al 1970(sarebbe una grande limitazione per il php) credo che ci sia qualche maniera, su unix non mi da questo errore ma mi  sballa la data, nel senso se gli passo 23 12 1959, mi da 31 02 61

risposto 11 anni fa
havana9
X 0 X

Il problema non è del PHP ma del codice che stai usando.

Quelle istruzioni si limitano a formattare la data, ma per farlo passano dal calcolo del timestamp, cosa possibile solo per le date successive al 1/1/70. Devi ottenere lo stesso risultato senza usare l'istruzione mktime.

Dimmi che formato vuoi ottenere e cosa ti aspetti che venga dalle variabili $_POST.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

ho un form di iscrizione dove l'utente deve inserire la data di nascita che verra inserita in un campo di database, il problema e che poi dovrei usare questa data per calcolare l'eta dell utente, ed evdentuali altri operazioni tipo mandare una mail quando e il suo compleanno.il problema e che l'inserimento potrei gestirlo anche come stringa, ma poi non riuscirei a gestire i vari calcoli che ti o detto

risposto 11 anni fa
havana9
X 0 X

Se hai delle date da memorizzare allora devi usare il campo "date" di MySQL. Questo però non significa che devi necessariamente passare dal calcolo del timestamp per formattarle prima di inserirle in MySQL.

MySQL accetta date nei formati:

YYYY-MM-DD (anno 4 cifre - mese 2 cifre - giorno 2 cifre)

YY-MM-DD (anno 2 cifre - mese 2 cifre - giorno 2 cifre)

Assicurati quindi che l'anno abbia 2 o quattro cifre e che i mesi ed i giorni siano espressi con due cifre.

Nel caso l'anno ti venga fornito con un numero anomalo di cifre puoi inviare un errore. Per il giorno ed il mese puoi invece convertirli sempre in questo modo: $giorno = str_pad($_POST['giorno'], 2, "0", STR_PAD_LEFT);

Una volta che hai formattato correttamente i vari elementi della data li metti insieme:

$data = $anno . '-' . $mese . '-' . $giorno;

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

grazie per i tuoi aiuti sei gentilissimo, questo gia l'avevo fatto solo che il problema mi si pone quando prelevo la data dal campo del database per calcolare la eta(data attuale-data di nascita dell'utente) di una persona, e4 li che mi da il problema relativo alla unix epoc perche tento di convvertirlo nl timestamp? in alternativa come potrei far ?

risposto 11 anni fa
havana9
X 0 X

Fai fare i conti direttamente a MySQL.

Ad esempio per l'età:

SELECT (YEAR(CURDATE())-YEAR(data_nascita)) - (RIGHT(CURDATE(),5)<RIGHT(data_nascita,5))  AS eta FROM tabella

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X

grazie provero ma mi puoi spiegare cosa fa la seconda parte dell'istruzione(cioe la funzione right)

risposto 11 anni fa
havana9
X 0 X

RIGHT è una funzione MySQL che restituisce la parte più a destra di una stringa, per un numero definito di caratteri. In questo contesto serve per vedere se, confrontando i mesi e i giorni della data corrente e di quella di nascita, sia necessario togliere un anno alla differenza degli anni calcolata.

 :bye:

risposto 11 anni fa
Gianni Tomasicchio
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda