Date due date, qual è il modo migliore per trovare il numero di giorni feriali in PHP?

StackOverflow https://stackoverflow.com/questions/80541

  •  09-06-2019
  •  | 
  •  

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?

È stato utile?

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.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top