[PHP] Contare numero dei giorni tra data_in e data_out

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Salve, per il completamento del mio cms ho bisogno di scompattare due date partendo da due input e contare solo i giorni che ci sono tra le due date questo è il codice:

$arrivo = mysqli_real_escape_string($mysqli, $_POST['arrivo']);
$partenza = mysqli_real_escape_string($mysqli, $_POST['partenza']);

// ricevo le date in formato gg/mm/aaaa

// sostituisco "/" con "-" e converto le date in aaaa-mm-dd

$date_in = strtr($arrivo, '/', '-');
$date_in = date("Y-m-d", strtotime($date_in));

$date_out = strtr($partenza, '/', '-');
$date_out = date("Y-m-d", strtotime($date_out));

// ora ho $data_in e $data_out in formato aaaa-mm-dd
// devo estrapolare solo "dd" da entrambe le date e contare quanti giorni ci sono in totale ad esempio dal 15/05/2017 al 20/05/2017 sono 5 giorni, come proseguo?

Grazie in anticipo
 
Ultima modifica:

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
A quanto pare ho risolto in questo modo (devo verificare con certezza):

PHP:
$calc_date_in = strtr($arrivo, '/', '-');
$calc_date_in = date("d", strtotime($calc_date_in));

$calc_date_out = strtr($partenza, '/', '-');
$calc_date_out = date("d", strtotime($calc_date_out));

$notti = $calc_date_out - $calc_date_in -1;
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
potresti usare se hai php versione >= 5.3.0
PHP:
$gg=date_diff($partenza, $arrivo);//però date formato aaaa/mm/gg
però attento ad usare nel db le date nel formato gg/mm/aaaa, esempio se
partenza = 02/04/2017
e se fai uana ricerca tipo: visualizza partenze dopo il 29/03/2017 quindi la query
.... WHERE data_partenza >= '29/03/2017'
la partenza del 02/04/2017 non ti viene visualizzata, è un confronto tra stringhe e la stringa 02/04/2017 è minore di 29/03/2017, ma la data NO e quindi errore
nel db è meglio aaaa/mm/gg o il timestamp
 

marino51

Utente Attivo
28 Feb 2013
3.051
193
63
Lombardia
visto che l'ho provata, posto anche questa soluzione che non richiede controlli e sostituzioni varie
PHP:
$arrivo   = '15/05/2017';
$partenza = '20/05/2017';

$ar = DateTime::createFromFormat('d/m/Y', $arrivo);
$pa = DateTime::createFromFormat('d/m/Y', $partenza);

$intervallo = $ar->diff($pa)->format('%d');
echo $intervallo.'<br />'."\r\n";

corretto i nomi
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Proverò anche questa funzione, devo fare in modo però che il primo giorno sia incluso mentre dovrebbe essere escluso l'ultimo, per questo io stavo pensando quel -1 al conteggio. Visto che il cliente arriva il 15 e parte il 20, il 20 appunto non devo contarlo come pernotto.
 

marino51

Utente Attivo
28 Feb 2013
3.051
193
63
Lombardia
se esegui lo script come l'ho postato, ti restituisce 5 come risultato
e gestisce correttamente 30 / 31 di fine mese o 28 / 29 di febbraio

ps, nel db meglio definire sempre i campi come "datetime" passando la data come yyyy-mm-gg,
formato che non può essere confuso dal db stesso, scambiando giorno con mese o viceversa
vedi date in formato americano

gestendo le date in questo modo sono fruibili tutte le funzioni del db relative alle date
che non lo sarebbero altrimenti
 
Ultima modifica:

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
149
63
PR
www.borgo-italia.it
ciao
se ti serve il numero delle notti basta che tu tolga 1 all'intervallo
PHP:
//....
$intervallo = $ar->diff($pa)->format('%d');
$intervallo-=1;//togli 1 a intervallo, equivalente a: $intervallo=$intervallo-1;
echo "numero notti $intervallo<br />";
//...
 

marino51

Utente Attivo
28 Feb 2013
3.051
193
63
Lombardia
se ti serve il numero delle notti basta che tu tolga 1 all'intervallo
NO, il risultato del calcolo è 5 ovvero 15-16-17-18-19 senza togliere nulla

Cattura.PNG
 

xone

Utente Attivo
4 Apr 2014
181
14
18
Salento
Ciao, si il campo l'ho fatto date proprio per non avere quei problemi, faccio una verifica del vostro codice. Grazie
 

marino51

Utente Attivo
28 Feb 2013
3.051
193
63
Lombardia
in php esiste un "mondo" per la gestione delle date,

oltre alla già citata funzione,
DateTime::createFromFormat

trovi anche la citata format, per esempio
$ar->format('Y-m-d');
ti restituisce la data in formato yyyy-mm-dd senza ricorrere a scambi e passaggi

ma soprattutto vengono gestite bene tutte le operazioni di somma e sottrazione,
con un'unica attenzione alle operazioni sui mesi quando presi individualmente
 
Discussioni simili
Autore Titolo Forum Risposte Data
S [RISOLTO]php contare numero delle query PHP 1
P [PHP] Contare quante volte uno stesso id si ripete nella tabella PHP 12
P [PHP] Contare i mesi con timestamp. PHP 8
zorro [PHP] Contare i record di una tabella PHP 6
F Contare le righe con php ad oggetti MySQL 0
Couting95 inserire dati da un file di testo in una tabella in php PHP 1
P Data scraping in PHP non funziona PHP 4
C Calcoli matematici in php PHP 5
F Scrivere dei dati in word con php PHP 0
D PHP leggere cartella di Windows PHP 2
I dominio aruba versione php server linux Domini 3
G Colorare menu select attraverso ricerca php PHP 0
L PHP motore di ricerca nel sito PHP 1
S PHP e Mysqli PHP 0
Y Stampare da php su un foglio A6 attraverso una stampante esterna PHP 1
M Visulizzare immagine con php PHP 8
G [PHP] Creare script di prenotazione con controllo disponibilità. PHP 7
G leggere file txt e stampare con php il contenuto a video PHP 7
F Ricreare struttura php+mysql su Xampp Apache 0
Z PHP.INI - STMP per invio email con PHP Server Dedicati e VPS 0
M Array associativi php su 2 campi mysql PHP 10
G Invio form con PHP PHP 3
T fatture con voci fattura in php PHP 0
T ALTRO PROBLEMA CON ARRAY PHP PHP 1
M Collegamento tra form html e script php PHP 4
M Problemi con la stampa dei valori in php PHP 1
W [Cerco collaborazioni] Sviluppatore Web (PHP) Offerte e Richieste di Lavoro e/o Collaborazione 1
D passare valori da database sql a php PHP 1
L Ricezione dei dati su file php da modulo html PHP 6
E Inviare variabile a PHP da ciclo in JS Javascript 0
A form PHP prenotazione tramite query PHP 2
A Form php prenotazione di un azienda sanitaria locale presso studio medico PHP 1
F menù select dinamico da db in php PHP 3
L Problemi form Pagina php HTML e CSS 3
L php mysql non salva solo id PHP 21
L php mysql cerca e visualizza pagina PHP 0
F Il codice php è giusto? PHP 2
R Aggiornare record mysql con Ajax, jQuery e php Ajax 2
A invio massivo dati a file php Javascript 4
Z MySql injection PHP PHP 1
V PHP form intersecate PHP 0
I [Offro][Retribuito] Programmatore Php Offerte e Richieste di Lavoro e/o Collaborazione 0
P Funzione jQuery Ajax invio file a php jQuery 1
C Dopo chiusura del tag php la stringa html va a capo PHP 1
E Transaction php PHP 11
B ciclare file xml con PHP PHP 1
L Estrazione dati php Database 6
A Aiuto per pagina php PHP 0
E Php select option e ajax PHP 23
I Aiuto php Dependent Lookup PHP 0

Discussioni simili