Estrarre mese da data digitata dall'utente

  • Creatore Discussione Creatore Discussione Max61
  • Data di inizio Data di inizio

Max61

Utente Attivo
2 Mar 2014
760
4
18
Buonasera, ho un campo data $dataevento dove l'utente inserisce la data dell'evento, e un campo testo $meseevento dove inserisce manualmente il mese corrispondente all'evento, avrei bisogno di estrapolare il mese dalla data inserita dall'utente nel campo $dataevento e che vada nel campo $meseevento in modo automatico non appena digitato, è possible?.
Allego il codice del calendario dove viene inserita la data:

PHP:
<label for="dataevento"><strong>Data evento</label><input onFocus="this.style.background='#FFFFCC';" name="dataevento" type="date" value="<?php echo $dataevento; ?>" size="40" maxlength="200" required>

Grazie dell'aiuto

Max61
 
ciao, no non è possibile, PHP è lato server, quindi la domanda (digitazione) ha bisogno di una risposta dal server quindi c'è bisogno di un invio dei dati per avere una risposta... questo lo puoi chiedere nella sezione JavaScript.
 
Ok. Grazie per la risposta, ma ho aggirato il problema in questo modo, ho creato due form una di inserimento dati da parte dell'utente e una di verifica dati sempre da parte dell'utente prima dell'insert in tabella.

Nella form di verifica c'è questa stringa che mi raccoglie il mese dalla data digitata dall'utente:
PHP:
<class="tip"><strong>dataevento<input type="text" name="dataevento" value="<?php echo date('F', strtotime($dataevento)); ?>"style="color:red; font-family:arial; font-size: 11pt"; maxlength="15" size="15" placeholder="" readonly>

il problema adesso sta nella lingua con cui mi ritorna il mese, cioè in inglese, lo posso trasformare in italiano?
Grazie per la collaborazione
Max61
 
Ultima modifica di un moderatore:
ciao
devi fare un passaggio in più e al posto di F mettere m
PHP:
<?php
$mese=array('gen','feb','mar','apr','mag','giu','lug','ago','sey','ott','nov','dic');//o scritte per esteso
$n=(int)date('m', strtotime($dataevento))-1;
?>
...value="<?php echo $mese[$m]; ?>"....
 
ciao
devi fare un passaggio in più e al posto di F mettere m
PHP:
<?php
$mese=array('gen','feb','mar','apr','mag','giu','lug','ago','sey','ott','nov','dic');//o scritte per esteso
$n=(int)date('m', strtotime($dataevento))-1;
?>
...value="<?php echo $mese[$m]; ?>"....

Ho provato come mi hai suggerito tu, ma il mese lo restituisce numerico...probabilmente sbaglio qualcosa.
Allego quello che ho fatto:
PHP:
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento));
e poi
PHP:
<input type="text" name="dataevento" value="<?php $mese[$n]; ?>

Grazie
Max61
 
ciao
intanto manca il -1 alla variabile $n, ricorda che gli array partono da 0
$mese[0] =>'Gennaio'
....
$mese[11] =>'Dicembre'
il parametro m ti restituisce il mese nella forma 01, 02,....,12
eventualmente prova a mettere al posto di m la n che restituisce 1, 2,....12
 
ciao
dimenticavo, stai attento a come è formattata la data inserita perchè strtotime() capisce se

slash (/) data in formato americano M/D/Y
trattino (-) data in formato europeo D-M-Y
il punto (.) data in formato ISO Y.M.D.

quindi il timestamp che restituisce viene diverso (e quindi quanto restutuito da date() ), se provi questo breve scrip lo vedi
PHP:
<?php
//se la data è in formato italiano (europeo) es. 11 dicembre 2015
echo date("d F Y", strtotime("11/12/15"))."<br>"; //output: 12 November 2015 (errata)
echo date("d F Y", strtotime("11-12-15"))."<br>"; //output: 15 December 2011
echo date("d F Y", strtotime("11.12.15"))."<br>"; //output: 23 January 2015 (errata)
//se l'anno è completo va un po' meglio
echo date("d F Y", strtotime("11/12/2015"))."<br>"; //output: 12 November 2015 (errata)
echo date("d F Y", strtotime("11-12-2015"))."<br>"; //output: 11 December 2015
echo date("d F Y", strtotime("11.12.2015"))."<br>"; //output: 11 December 2015
?>
 
ciao
dimenticavo, stai attento a come è formattata la data inserita perchè strtotime() capisce se

slash (/) data in formato americano M/D/Y
trattino (-) data in formato europeo D-M-Y
il punto (.) data in formato ISO Y.M.D.

quindi il timestamp che restituisce viene diverso (e quindi quanto restutuito da date() ), se provi questo breve scrip lo vedi
PHP:
<?php
//se la data è in formato italiano (europeo) es. 11 dicembre 2015
echo date("d F Y", strtotime("11/12/15"))."<br>"; //output: 12 November 2015 (errata)
echo date("d F Y", strtotime("11-12-15"))."<br>"; //output: 15 December 2011
echo date("d F Y", strtotime("11.12.15"))."<br>"; //output: 23 January 2015 (errata)
//se l'anno è completo va un po' meglio
echo date("d F Y", strtotime("11/12/2015"))."<br>"; //output: 12 November 2015 (errata)
echo date("d F Y", strtotime("11-12-2015"))."<br>"; //output: 11 December 2015
echo date("d F Y", strtotime("11.12.2015"))."<br>"; //output: 11 December 2015
?>

Ciao, ho tolto il -1 alla variabile $n altrimenti non mi dava correttamente il mese della data digitata es.: 10/10/2015, mi restituiva come mese 9 invece di 10. Il mio intento pero' era quello di avere il mese in lettere italiane mentre con 'F' me lo restituisce in inglese.
Ciao, Max61
 
ciao
verifica quello che stai facendo perchè funziona, vedi l'esempio
PHP:
<?php
$dataevento="24-01-2015";
//$dataevento="24-10-2015";
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
echo $mese[$n];
/*output
24-01-2015 => Gennaio 
24-10-2015 => Ottobre 
*/
?>
 
Grazie della pazienza. Appena ho un po di tempo ci provo, ti voglio chiedere un altra cosa:, il formato data che hai usato nell'esempio 15-10-2015, e' diverso da quello che utilizzo io 15/10/2915, non sara' che non fuziona per questo? Tu hai usato il trattino, io lo slash. Grazie ancora e buona domenica.
Max61
 
Funziona perfettamente!!! Grazie!!!

Peccato che non riesco a mettere in tabella il valore di
PHP:
$mese [$n]
, infatti o lo mette in inglese o sotto forma di valore numerico a seconda dei campi che gli passo con POST, questa è la stringa che gli passavo e mi inseriva in tabella nella lingua inglese:
PHP:
$meseevento = date("F", strtotime($_POST['dataevento']));
restituiva Marzo > March

Questa invece è una delle tante prove che ho fatto e non inserisce nulla in tabella, il campo rimane vuoto
PHP:
$meseevento = $_POST['mese[$n]'];
Null

Questa inserisce in tabella il mese numerico:
PHP:
$meseevento = date("n", strtotime($_POST['dataevento']));
Marzo > 3

Grazie infinite della vostra pazienza, ma come capirete è da poco che mi cimento nel PHP
Max61
 
Grazie della pazienza. Appena ho un po di tempo ci provo, ti voglio chiedere un altra cosa:, il formato data che hai usato nell'esempio 15-10-2015, e' diverso da quello che utilizzo io 15/10/2915, non sara' che non fuziona per questo? Tu hai usato il trattino, io lo slash. Grazie ancora e buona domenica.
Max61

Funziona perfettamente!!! Grazie!!!

Peccato che non riesco a mettere in tabella il valore di
PHP:
$mese [$n]
, infatti o lo mette in inglese o sotto forma di valore numerico a seconda dei campi che gli passo con POST, questa è la stringa che gli passavo e mi inseriva in tabella nella lingua inglese:
PHP:
$meseevento = date("F", strtotime($_POST['dataevento']));
restituiva Marzo > March

Questa invece è una delle tante prove che ho fatto e non inserisce nulla in tabella, il campo rimane vuoto
PHP:
$meseevento = $_POST['mese[$n]'];
Null

Questa inserisce in tabella il mese numerico:
PHP:
$meseevento = date("n", strtotime($_POST['dataevento']));
Marzo > 3

Spero in un vostro aiuto...
Grazie infinite della vostra pazienza, ma come capirete è da poco che mi cimento nel PHP
Max61
 
Ultima modifica:
ciao
verifica quello che stai facendo perchè funziona, vedi l'esempio
PHP:
<?php
$dataevento="24-01-2015";
//$dataevento="24-10-2015";
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
echo $mese[$n];
/*output
24-01-2015 => Gennaio 
24-10-2015 => Ottobre 
*/
?>


Funziona perfettamente!!! Grazie!!!

Peccato che non riesco a mettere in tabella il valore di
PHP:
$mese [$n]
, infatti o lo mette in inglese o sotto forma di valore numerico a seconda dei campi che gli passo con POST, questa è la stringa che gli passavo e mi inseriva in tabella nella lingua inglese:
PHP:
$meseevento = date("F", strtotime($_POST['dataevento']));
restituiva Marzo > March

Questa invece è una delle tante prove che ho fatto e non inserisce nulla in tabella, il campo rimane vuoto
PHP:
$meseevento = $_POST['mese[$n]'];
Null

Questa inserisce in tabella il mese numerico:
PHP:
$meseevento = date("n", strtotime($_POST['dataevento']));
Marzo > 3

Spero in un aiuto...
Grazie infinite della vostra pazienza, ma come capirete è da poco che mi cimento nel PHP
Max61
 
ciao
se guardi i post prima ti ho indicato come strtotime interpreta la data inviata
se scrivi 03/11/2015 (inendendo 3 novembre 2015) interpreta che è nel formato americano cioe mese/giorno/anno quindi per strtotime il mese è 03, quindi ti risulta marzo

se invece scrivi 03-11-2015 la interpreta come formato europeo giorno/mese/anno quindi la interpreta come vuoi tu (mese novembre)
l'altro caso è scrivere 03.11.2015 dove interpreta la data in formato ISO anno/mese/giorno e quindi va in pallino perchè il giorno 2015 non esiste

dai un occhio a:
http://php.net/manual/en/function.strtotime.php scorri in basso -> User Contributed Notes 213

poi cosa intendi che non riesci ad inserire un tabella, posta la query che usi
 
ciao
se guardi i post prima ti ho indicato come strtotime interpreta la data inviata
se scrivi 03/11/2015 (inendendo 3 novembre 2015) interpreta che è nel formato americano cioe mese/giorno/anno quindi per strtotime il mese è 03, quindi ti risulta marzo

se invece scrivi 03-11-2015 la interpreta come formato europeo giorno/mese/anno quindi la interpreta come vuoi tu (mese novembre)
l'altro caso è scrivere 03.11.2015 dove interpreta la data in formato ISO anno/mese/giorno e quindi va in pallino perchè il giorno 2015 non esiste

dai un occhio a:
http://php.net/manual/en/function.strtotime.php scorri in basso -> User Contributed Notes 213

poi cosa intendi che non riesci ad inserire un tabella, posta la query che usi


Cerco di spiegarmi meglio: con il codice che mi hai postato te riesco a estrapolare correttamente il mese della data digitata dall'utente in lingua italiana, il problema è soltanto che non riesco a inserirlo nella tabella in italiano, vedi gli esempi che ti ho postato in privato.

Allego comunque query che utilizzo per l'insert che ti ripeto funziona perfettamente con tutti i campi:

PHP:
$query = "INSERT INTO tblcalcoloeta (datanascita, dataevento, statocivile, sesso, meseevento, mesecalcolo, annocalcolo, eta, fascia_eta, comuneresidenza, datainserimento)
			VALUES ('$datanascita', '$dataevento', '$statocivile', '$sesso', '$meseevento', '$mesecalcolo', '$annocalcolo', '$eta', '$fascia_eta', '$comuneresidenza', '$datainserimento')";

Nella speranza di essere stato chiaro ti saluto

Max61
 
ciao
se non ho capito male tu vorresti che nel campo meseevento fosse inserito il nome del mese in italiano
PHP:
<?php
//....
$query = "INSERT INTO tblcalcoloeta (datanascita, dataevento, statocivile, sesso, meseevento, mesecalcolo, annocalcolo, eta, fascia_eta, comuneresidenza, datainserimento)
            VALUES ('$datanascita', '$dataevento', '$statocivile', '$sesso', '$meseevento', '$mesecalcolo', '$annocalcolo', '$eta', '$fascia_eta', '$comuneresidenza', '$datainserimento')";  
//....
?>
giusto?
intanto ti chiedo una cosa: il meseevento deriva da datatevento?
se è così a che ti serve inserire il valore in tabella e il campo?
quando estrai i valori estrai dataevento e lo trasformi nel meseevento, analogo discorso per il campo eta (ogni anno dovresti aggiornarlo) così come fascia_eta
 
ciao
se non ho capito male tu vorresti che nel campo meseevento fosse inserito il nome del mese in italiano
PHP:
<?php
//....
$query = "INSERT INTO tblcalcoloeta (datanascita, dataevento, statocivile, sesso, meseevento, mesecalcolo, annocalcolo, eta, fascia_eta, comuneresidenza, datainserimento)
            VALUES ('$datanascita', '$dataevento', '$statocivile', '$sesso', '$meseevento', '$mesecalcolo', '$annocalcolo', '$eta', '$fascia_eta', '$comuneresidenza', '$datainserimento')";  
//....
?>
giusto?
intanto ti chiedo una cosa: il meseevento deriva da datatevento?
se è così a che ti serve inserire il valore in tabella e il campo?
quando estrai i valori estrai dataevento e lo trasformi nel meseevento, analogo discorso per il campo eta (ogni anno dovresti aggiornarlo) così come fascia_eta


Esatto, il meseevento deriva da datatevento che viene inserita dall'utente, vorrei che nel campo meseevento fosse inserito il nome del mese in italiano, il valore del mese mi serve per fare le query statistiche per mese, anno, sesso, fascia di età ecc.

Sicuramente il codice è migliorabile in toto, ma le mie attuali conoscenze di php non me lo consentono, mi accontenterei di inserire in tabella il nome del mese in italiano.

Se puoi darmi qualche dritta...

Grazie
Max61
 
Ultima modifica:
ciao
hai detto che ha provato
PHP:
<?php
$dataevento="24-01-2015";
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
echo $mese[$n];
//....
?>
e che funziona, quindi (modificando) devi inserire il valore che hai in $mese[$n]
schematizzando

PHP:
<?php
//....
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
$query = "INSERT INTO tblcalcoloeta (datanascita, dataevento, statocivile, sesso, meseevento, mesecalcolo, annocalcolo, eta, fascia_eta, comuneresidenza, datainserimento)
            VALUES ('$datanascita', '$dataevento', '$statocivile', '$sesso', '".$mese[$n]."', '$mesecalcolo', '$annocalcolo', '$eta', '$fascia_eta', '$comuneresidenza', '$datainserimento')";
//....
?>

però un consiglio: se stat facendo qualcosa solo per studio che poi butterai via ok, ma se fa qualcosa che poi ti servirà attento "mettere le mani su qualcosa di fatto" è sempre una rogna
 
ciao
hai detto che ha provato
PHP:
<?php
$dataevento="24-01-2015";
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
echo $mese[$n];
//....
?>
e che funziona, quindi (modificando) devi inserire il valore che hai in $mese[$n]
schematizzando

PHP:
<?php
//....
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso 
$n=(int)date('m', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n'
$query = "INSERT INTO tblcalcoloeta (datanascita, dataevento, statocivile, sesso, meseevento, mesecalcolo, annocalcolo, eta, fascia_eta, comuneresidenza, datainserimento)
            VALUES ('$datanascita', '$dataevento', '$statocivile', '$sesso', '".$mese[$n]."', '$mesecalcolo', '$annocalcolo', '$eta', '$fascia_eta', '$comuneresidenza', '$datainserimento')";
//....
?>

però un consiglio: se stat facendo qualcosa solo per studio che poi butterai via ok, ma se fa qualcosa che poi ti servirà attento "mettere le mani su qualcosa di fatto" è sempre una rogna


Ce l'ho fatta, non metteva in tabella il mese nella lingua italiana che mi restituiva $mese[n], perchè successivamente a questo gli passavo //$meseevento = $_POST['meseevento'];, commentato questo va perfettamente con il codice che mi hai postato tu e che riallego:

PHP:
$mese=array('Gennaio','Febbraio','Marzo','Aprile','Maggio','Giugno','Luglio','Agosto','Settembre','Ottobre','Novembre','Dicembre');//o scritte per esteso  
$n=(int)date('n', strtotime($dataevento))-1;//e funzia sia con 'm' che con 'n' 
$meseevento =$mese[$n];

Non capisco il tuo "mettere le mani su qualcosa di fatto", cosa intendi dire?
Ciao e ancora GRAZIE
Max61
 
ciao
intendo che stai scrivendo delle istruzioni, tra un po' avendo imparato meglio ti accorgi che lo script che hai fatto è migliorabile quindi devi rimettere le mani in quello che hai fatto
 

Discussioni simili