Visualizzazione dei risultati da 1 a 9 su 9
  1. #1

    differenza date in periodo stabilito

    Ciao

    Ho un problema che non riesco a risolvere

    Mettiamo che la prossima stagione estiva vada dal 2005-06-04 e finisca il 2005-09-24, io vorrei che:

    dato un $_POST[data_inizio]
    dato un $_POST[data_fine]

    vorrei sapere quanti giorni del periodo compreso tra $_POST[data_inizio] e $_POST[data_fine] sono nella stagione estiva

    Ad esempio, se $_POST[data_inizio] è 2005-07-02 e $_POST[data_fine] è 2005-07-16, il dato che interessa a me è (la differenza) è 14, perchè tutto il periodo è compreso tra 2005-06-04 e 2005-09-24

    Se invece $_POST[data_inizio] è 2005-05-28 e $_POST[data_fine] è 2005-06-11 la differenza è di 7, perchè solo sette giorni sono compresi nel periodo estivo

    Come diamine faccio a ricavare questa differenza?

    Ciao e grazie,

    Edoardo

  2. #2
    http://it.php.net/manual/it/ref.datetime.php

    Prova a vedere qui. Credo che prima si debba usare mktime() per trasformare la data in timestamp:

    $data = mktime("0", "0", "0", $mese, $giorno, $anno);

    Non ne sono sicuro però! Non sono mai stato bravissimo con questo tipo di operazioni!
    eCommerceRS.NET - Commerciante, vendi on-line!
    Il mio nick è mircov e non mirco!!!

  3. #3
    Trasforma la data in giorno dell'anno, date('z') (il DAYOFYEAR di mysql...) poi le combinazioni sono solo 4, fai un giro di if/elseif...
    codice:
    $a = date('z', mktime(0, 0, 0, 6, 4, 2005 ));      // inizio estivo
    $b = date('z', mktime(0, 0, 0, 9, 24, 2005 ));     // fine estivo
    
    $c = date('z', mktime(0, 0, 0, 4, 24, 2005 ));     // inizio periodo
    $d = date('z', mktime(0, 0, 0, 8, 24, 2005 ));     // fine periodo
    
    If($a < $c AND $b > $d )  echo $tot = $d - $c;         // il range e' tutto dentro estivo
    
        elseif($a > $c AND $b < $d )   echo  $tot = $b - $a;     // inizio e fine esterne all'estivo
    
            elseif($a > $c AND $b > $d )   echo  $tot = $d - $a;     // inizio fuori - fine dentro
    
                 elseif($a < $c AND $b < $d )   echo  $tot = $b - $c;   // inizio dentro - fine fuori
    La data la puoi dividere in anno-mese-giorno con list ed explode...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  4. #4
    Ti ringrazio

    Se quindi non erro se $tot ha un valore positivo allora quelli sono i giorni validi nel periodo, se ha un valore negativo allora i giorni non sono nel periodo

    Ciao e grazie,

    Edoardo

  5. #5
    Originariamente inviato da EdoardoP
    Ti ringrazio

    Se quindi non erro se $tot ha un valore positivo allora quelli sono i giorni validi nel periodo, se ha un valore negativo allora i giorni non sono nel periodo

    Ciao e grazie,

    Edoardo
    Direi di no. $tot ha sempre un valore positivo. Non ho considerato i casi del periodo tutto inferiore o tutto superiore al periodo estivo.

    Sono considerati solo i 4 casi che darebbero un risultato significativo per la tua analisi. Per i due omessi basta aggiungere un elseif....

    elseif($a > $d OR $b < $a) $tot = 0;


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  6. #6
    avevo notato che non erano coperti i casi estremi, ma nel mio caso sono cose ininfluenti perchè non capitano mai

    Perdonami se ti contraddico, ma se il periodo scelto non è all'intero della stagion estiva il valore è negativo e a me va benissimo così

    Non ti risulta?

    Edoardo

  7. #7
    Originariamente inviato da EdoardoP
    avevo notato che non erano coperti i casi estremi, ma nel mio caso sono cose ininfluenti perchè non capitano mai

    Perdonami se ti contraddico, ma se il periodo scelto non è all'intero della stagion estiva il valore è negativo e a me va benissimo così

    Non ti risulta?

    Edoardo
    Non ho provato, puo' essere ... ma non e' calcolata, e' una casualita' non valutata. Non e' accettabile lavorare su delle eccezioni non valutate. Se la valuti tu ok.

    Devi anche considerare la possibilita' che una data inizi o finisca in un anno diverso.... Se poi non succede mai ... ma se succede e' un bug. Personalmente mi piace chiudere tutte le eccezioni conosciute.


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  8. #8
    Ho provato ed e' corretto. I due eventi (tutto minore e tutto maggiore) vengono coperti dalla 2° e 3° elseif.... Quindi un risultato negativo significa nessun giorno nel range.

    Per quanto riguarda l'anno... potrebbe essere interessante perche' si potrebbe dover calcolare giorni nel periodo natalizio od altro.

    Basterebbe poi fare una funzione a cui passare le quattro date...


    Il silenzio è spesso la cosa migliore. Pensa ... è gratis.

  9. #9
    A dire la verità, considerando l'utilizzo che ne faccio io, mi sembra già un sistema ottimale

    In parole povere succede che io offro soggiorni d'estate e che per buona parte della stagione, salvo le settimane iniziali e finali, i clienti devono pagare dei costi in loco

    La funzione mi serviva per sapere se il periodo di soggiorno è all'interno del periodo in cui sono in vigore questi balzelli oppure no.

    Le eccezioni a cui fai riferimento non mi intaccano, perchè nessuno va in vacanza per 4 mesi consecutivi nelle mie strutture e, anche se lo facessero, non utilizzerebbero la piattaforma online ma mi contatterebbero per ottenere sconti aggiuntivi

    Edoardo

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.