Estrarre mese da data digitata dall'utente

Max61

Utente Attivo
2 Mar 2014
740
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
 

filomeni

Moderatore
Membro dello Staff
MOD
14 Mag 2006
1.054
6
38
53
Roseto degli Abruzzi (TE)
www.sitiweb.cloud
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.
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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]; ?>"....
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
?>
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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 
*/
?>
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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:

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

Max61

Utente Attivo
2 Mar 2014
740
4
18
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
Autore Titolo Forum Risposte Data
giuseppe_123 [PHP] Estrarre giorno mese e anno da una data PHP 2
L Estrarre record di un dato mese MySQL 5
D Miglior modo per estrarre le occorrenze di un elemento in un set di più file xml e quindi scrivere il risultato in una tabella Excel o magari in JSON XML 0
M Estrarre soltanto i prodotti con stessa descrizione PHP 10
peppe0703 Come Estrarre dati da db wordpress e richiamarli in html esterno HTML e CSS 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
E Estrarre dati da doppia tabella, banale ma non sempre PHP 1
M Estrarre valore con SELECT COUNT PHP 0
D Estrarre database con link esterno Database 10
S Raggruppare ed estrarre data più recente MySQL 6
F Estrarre ultima foto da cartelle PHP 2
R Estrarre valori duplicati più volte PHP 0
C Estrarre dati stringa Sql Database 1
L estrarre valori max tra più tabelle MySQL 2
L Estrarre da Cartella una determinata 'via' PHP 15
J estrarre url dei file video da youtube "get_video_info" PHP 6
M Estrarre dati da un database PHP 2
M Estrarre valori MAX da un db con una left join MySQL 8
M Estrarre dati da una select HTML PHP 3
C [PHP] Estrarre da una classe i valori che mi interessano PHP 5
S [PHP] Estrarre dati da tabella e fare la media ad intervalli di tempo PHP 11
R [PHP] Estrarre id utente loggato.? PHP 4
S [PHP] Estrarre elementi array su più variabili PHP 5
S [PHP] Estrarre dati tabella in diversi array PHP 2
P [MS ACCESS] Estrarre più somme da una query MS Access 4
trattorino estrarre titolo video facebook in php PHP 0
D [WordPress] come fare per estrarre dati da un db MySQL tramite una form e visualizzare il risultato WordPress 0
S [Javascript] come estrarre valori array e inserirli in diverse variabili Javascript 1
N [PHP] Estrarre singolo valore da array PHP 4
trattorino [PHP] sql estrarre in base all'ultima visita PHP 4
P [Visual Basic] access sql estrarre id vendite x cli e articolo con data maggiore del recordset Visual Basic 2
Jensen [PHP] Estrarre prossimi 4 lunedì PHP 4
trattorino [PHP] estrarre dati singoli PHP 1
G [PHP] estrarre data da timeline yyyy-dd-gg hh:mm:ss PHP 4
Z Estrarre dati da un DB Mysql PHP 4
I database mysql estrarre due tabelle Database 2
S [PHP] Estrarre dati colonna in una stringa PHP 6
S [PHP] estrarre dati sito web protetto con username e password PHP 13
Merlina3377 [PHP] estrarre solo un determinato id da tanti con REGEXP O LIKE PHP 1
Gigi87 estrarre i dati da un forum o social network Presentati al Forum 1
trattorino Estrarre Nome Utente jquery div php PHP 9
trattorino [Javascript] estrarre id link yt Javascript 1
S [PHP] estrarre le email da un elenco di url PHP 21
T4MAR4 [PHP] estrarre tag da un testo PHP 3
T [PHP] Estrarre stringa PHP 3
G [PHP] ESTRARRE DA DB VALORE MASSIMO E MINIMO IN UN INTERVALLO IMPOSTABILE A PIACERE PHP 56
bubino8 [PHP] Estrarre dominio No Sottodomini PHP 10
L [PHP] Estrarre dati da sito web Offerte e Richieste di Lavoro e/o Collaborazione 4
sandropochi [PHP] Query per estrarre record con data successiva a quella odierna PHP 2
gandalf1959 Estrarre da un db mysql le mail, eliminando le doppie PHP 6

Discussioni simili