Pagina 2 di 2 primaprima 1 2
Visualizzazione dei risultati da 11 a 12 su 12
  1. #11
    No, per i giorni festivi non c'è urgenza, o una precisa necessità.

    Il problema con cui mi scontro è proprio quello del calcolo dei giorni extra.
    Sembra semplice ma è molto più complesso di quel che sembra, visto che certi giorni vanno contati e considerati solo in seguito a certe condizioni, differenti per i due estremi.

    Per esempio i giorni di avanzo alla fine del periodo si possono aggiungere tranquillamente facendo
    Codice PHP:
    // $diff è la parte della differenza, in giorni, delle settimane intere

    /* I giorni alla fine possono essere aggiunti semplicemente addizionando il giorno della settimana (partendo da 1=lunedì), ed eventualmente limitandolo ai 5 giorni feriali, se il giorno è Sabato (6) o Domenica (7)
    */
    $giorniExtraEnd = (int)date("N",$dataEnd) < ? (int)date("N",$dataEnd) : 5;

    /* I giorni all'inizio possono essere aggiunti ma devono prima esser calcolati. Se è presente anche un solo giorno feriale (il weekday minore/uguale a 5) devo sottrarre comunque due giorni della settimana (Sabato e Domenica sono considerati come "alla fine" della settimana e quindi sempre presenti). Altrimenti se è Sabato (6) o Domenica (7) non si aggiunge alcun giorno (0)
    */
    $giorniExtraStart = (int)date("N",$dataStart) <= ? (- (int)date("N",$dataStart) - 2) : 0;

    $diff $giorniExtraEnd $giorniExtraStart
    Ha senso questo ragionamento?
    A me non riesce di farlo tornare


  2. #12
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    senti... ho tirato fuori quest'altra roba che mi pare funzioni... vedi un po'... la commento:

    Codice PHP:
    $from strtotime('09/13/2009'); // formato americano
    $upto strtotime('09/21/2009'); // formato americano

    // passare le date come timestamp, estremi compresi:
    function CountHolidays($from$upto) {
        
    // calcola i giorni della settimana degli estremi:
        
    $weekday_from date("N"$from); $weekday_upto date("N"$upto);

        
    // calcola i giorni totali:
        
    $total_days juliantojd(date("n"$upto), date("j"$upto), date("Y"$upto)) - juliantojd(date("n"$from), date("j"$from), date("Y"$from)) + 1;

        
    $extra_days 0$extra_hol 0;
        
    // se parto non da lunedì...
        
    if ($weekday_from 1) {
            
    // ...conteggio a parte i giorni in eccesso...
            
    $extra_days += ($weekday_from);
            
    // ...e se parto da meno di sabato ho 2 festivi, altrimenti 1, in questi giorni
            
    $extra_hol += (($weekday_from 6)?(1):(2));
        };
        
    // se finisco prima di domenica
        
    if ($weekday_upto 7) {
            
    // ...conteggio a parte i giorni in eccesso...
            
    $extra_days += $weekday_upto;
            
    // ...e se finisco prima di sabato non ho festivi, altrimenti ne ho 1, in questi giorni
            
    $extra_hol += (($weekday_upto 6)?(0):(1));
        };

        
    // calcolo i festivi delle settimane "intere"...
        
    $intra_hol = (($total_days $extra_days) / 7) * 2;

        
    // ...e aggiungo gli "extra":
        
    $tot_hol $intra_hol $extra_hol;
        
        return (
    $tot_hol);
    };

    print 
    CountHolidays($from$upto); 
    La funzione conta i festivi considerano sabato e domenica... è facilmente adattabile per includere liste di festivi "fissi" e restituire anche i feriali e/o altre informazioni derivate.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.