[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.046
150
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.203
207
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.203
207
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.046
150
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.203
207
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.203
207
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
F Cerco Hosting con VECCHIE versioni di php Hosting 0
Cosina Captcha php PHP 1
S passare un valore da un form a un file .php con metodo post PHP 4
N php msyql PHP 6
N php problemi a visualizzare video PHP 3
A menu a tendina php PHP 1
D protezione cartelle: blocco visualizzazione/scaricamento contenuto, ma abilitazione utilizzo dati da parte di file .php presenti sul sito Web Server 1
F Php date_diff PHP 1
K [PHP] Aggiungere caratteri ad una stringa in base alla lunghezza della stessa PHP 2
C Wp-admin a file php WordPress 5
Lino80 [Retribuito] Cerco programmatore php per modifica/inserimento funzione/valori da un plugin importer wordpress Offerte e Richieste di Lavoro e/o Collaborazione 0
csi Inviare file jpg in locale alla stampante con php PHP 0
M Passaggio variabili array php su un tasto jq PHP 3
E Php aggiornamento tabella PHP 9
G phpmailer e php 8.1 con estensione mysqli PHP 6
M Invio dati database via email php PHP 0
K [php] Problema con inner join PHP 4
K [php]form invio dati PHP 0
P Codifica caratteri speciali mysql php PHP 0
K [PHP] Problema con variabili concatenate. PHP 1
E Stampante termica escpos-php PHP 6
JeiMax Modifica codice php personalizzato PHP 2
G Come modificare un pdf in php PHP 1
U Link a doppio file PHP PHP 0
E PHP & jQuery PHP 8
N Passare array da php a javascript PHP 5
F Applicazione PHP/MySQL per prenotazioni: limitare il numero massimo di posti prenotabili PHP 20
L tipo boolean non funzionante su mariadb (mysql). E codice php 7.4. PHP 0
U PHP creare un file excel dopo ricerca nel DB PHP 0
M PHP/MySQL - Estrarre valori min e max di ogni gruppo PHP 5
F Php e fatturazione elettronica PHP 0
P lanciare script asp (o php) da jquery Javascript 1
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 1
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

Discussioni simili