Campo Data - Calcoli con controllo
Nel validate di un modulo ho inserito il controllo che DataRi non dev'essere maggiore di DataMi per più di 3 giorni. Il controllo non funziona. Quando aggiuge 3 giorni (+3 day) alla DataMi mi somma i mesi e non i giorni. Mi sa che la trasformazione che attuo è solo per la Visualizzazione e non per i calcoli. Questo il codice
$DataMi = $form_state->getValues()['field_data'][0]['value']->format('d/m/Y'); $DataRi = $form_state->getValues()['field_data_rientro'][0]['value']->format('d/m/Y'); // Alla Data di Rientro vengono aggiunti 3 giorni $DataCo = date('m/d/Y', strtotime("+3 day", strtotime($DataMi)));
Se come data Missione inserisco 08/01/2020 aggiungendo i 3gg Visualizza la data con valore 08/04/2020 invece di 11/01/2020
Gaetano
Risposte
Ciao, se per 08/01/2020
Ciao, se per 08/01/2020 intendi 8 gennaio, allora l'errore risiede li per il sistema è il 1° agosto, quindi direi che la formula funziona.
Concordo, il problema è che
Concordo, il problema è che non so come aggiungere i 3gg giorno e non al msese. Facendo diventare l'08/01/202 in 11/01/2020. Pensavo che il comando '+3 day', in automatico aumentasse i giorni ma non è così.
Le ho provate tutte ma non ho capito come fare
Ma li stai già aggiungendo al
Ma li stai già aggiungendo al giorno!!!!
Il formato è MeseGiornoAnno non GiornoMeseAnno come pensi tu.
$DataCo = date('m/d/Y', strtotime("+3 day", strtotime($DataMi)));
Vedi che hai impostato m/d/Y???
Scusa hai ragione, nel
Scusa hai ragione, nel precedente messaggio mi sono dimenticato di dirti che il codice che uso è questo
Mi sono dimenticato di aggiornare il codice dopo aver fatto una prova ricordando che il database memorizza in formato americano.
Adesso ho fatto una prova inserendo come DataMI 09/12/2020, come DataRi 10/12/2020.
Il risultato della linea di codice scritta sopra è DataCo = 15/09/2020
Aggiunge 3 mesi al mese e poi lo visualizza nel formato italiano
DatMi e DataRi li prendo dalla form
Il tuo codice ora è
$DataMi = $form_state->getValues()['field_data'][0]['value']->format('d/m/Y');
$DataRi = $form_state->getValues()['field_data_rientro'][0]['value']->format('d/m/Y');
// Alla Data di Rientro vengono aggiunti 3 giorni
$DataCo = date('d/m/Y', strtotime("+3 day", strtotime($DataMi)));
Confermo e svuotata la cache
Confermo e svuotata la cache + volte
Non so + che provare
Potenzialmente credo tu abbia
Potenzialmente credo tu abbia un oggetto DateTime in
$form_state->getValues()['field_data_rientro'][0]['value']
se fosse così potresti usare
https://www.php.net/manual/en/datetime.add.php
Letto un po' di
Letto un po' di documentazione sull'oggetto Data e contine varie specifiche.
Cambiato il codice della lettura del campo DataMi lo faccio senza il format per avere l'oggetto, aggiungo i 3gg e poi lo trasformo in stringa per fare i controlli
$DataMi = $form_state->getValues()['field_data'][0]['value'];
// Alla Data aggiungo 3 giorni
$DataMi = $DataMi->add( new DateInterval('P3D') );
$DataCo = date('d/m/Y', strtotime($DataMi));
Adesso $DataCo è uguale a $DataMi + 3gg
Il problema è che mi aggiorna l'input di field_data mettendo il valore di $DataCo e non capisco il perchè
Ho anche provato a conservare il valore prima di aggiungere i giorni ma nulla da fare
$a = $form_state->getValues()['field_data'][0]['value']->format('d/m/Y');
$DataMi = $form_state->getValues()['field_data'][0]['value'];
//$DataCo = date('d/m/Y', strtotime("+3 day", strtotime($DataMi)));
$a = $a->add( new DateInterval('P3D') );
$DataCo = date('d/m/Y', strtotime($DataMi));
$DataMi = $a;
Stesso risultato come mai aggiorna i vari campi delle variabili?
Clona l'oggetto data prima di
Clona l'oggetto data prima di modificarlo, ti stai portando dietro riferimenti che modificano l'oggetto originale
$CloneData = clone $DataMi;
poi usa la var $CloneData.
Si adesso va bene, non avrei
Si adesso va bene, non avrei mai immaginato che oltre alla data si portasse dietro altro.
Dagli esempi che ho visto in php, sembrava una sciocchezza, invece
Grazie