Date due date, qual è il modo migliore per trovare il numero di giorni feriali in PHP?
Domanda
Il titolo è praticamente autoesplicativo.Date due date, qual è il modo migliore per trovare il numero di giorni della settimana utilizzando PHP?I giorni della settimana vanno dal lunedì al venerdì.
Ad esempio, come faccio a scoprire che ci sono 10 giorni feriali nel mezzo 31/08/2008
E 13/09/2008
?
Soluzione
$datefrom = strtotime($datefrom, 0);
$dateto = strtotime($dateto, 0);
$difference = $dateto - $datefrom;
$days_difference = floor($difference / 86400);
$weeks_difference = floor($days_difference / 7); // Complete weeks
$first_day = date("w", $datefrom);
$days_remainder = floor($days_difference % 7);
$odd_days = $first_day + $days_remainder; // Do we have a Saturday or Sunday in the remainder?
if ($odd_days > 7) { // Sunday
$days_remainder--;
}
if ($odd_days > 6) { // Saturday
$days_remainder--;
}
$datediff = ($weeks_difference * 5) + $days_remainder;
Da qui: http://www.addedbytes.com/php/php-datediff-function/
Altri suggerimenti
Se stai creando un sistema di fatturazione, devi pensare ai giorni festivi, a Pasqua, ecc.Non è semplice calcolarlo.
La soluzione migliore che abbia mai visto è pregenerare una tabella con i giorni e il relativo tipo nel database SQL (riga al giorno = 365 righe all'anno) e quindi eseguire una semplice query di conteggio con la selezione corretta (clausola WHERE).
Puoi trovare questa soluzione completamente descritta in Il pensiero in serie di Joe Celko:Tabelle ausiliarie, temporali e virtuali in SQL
Un modo sarebbe convertire le date in timestamp unix utilizzando strtotime(...), sottraendo i risultati e immergendosi con 86400 (24*60*60):
$dif_in_seconds = abs(strtotime($a) - strtotime($b));
$daysbetween = $dif_in_seconds / 86400;
ETA:OH..Intendevi i giorni feriali come lunedì-venerdì..Non l'ho visto all'inizio..
Il modo migliore è scorrere tutte le date comprese nell'intervallo di date specificato e ottenere il giorno della settimana per ciascuna data.Se è un giorno della settimana, incrementa un determinato contatore.Alla fine del processo ottieni il numero di giorni feriali.
Le funzioni PHP mktime() e date() (per lavorare con i timestamp UNIX) sono tue amiche qui.