Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79

    Suddividere range di date

    Salve a tutti,
    mi trovo con dei range di date che ho necessita' di suddividere.
    Ad esempio, se il range e' dal 11/07/2011 all' 11/09/2011 voglio dividerlo in base ai mesi in questo modo: 11/07/2011 - 31/07/2001, 01/08/2011 - 31/08/2011, 01/09/2011 - 11/09/2011.

    Esiste una funzioncina che faccia questo sporco lavoro?


    Devo anche riuscire a dividere l'intervallo in base ai giorni della settimana. Ad esempio, poniamo che durante il periodo di tempo dell'esempio precedente un'associazione organizzi delle proiezioni pubbliche di film. Il lunedi' (giorno 1) si proietta Spiderman, il martedi' (giorno 2) Superman e cosi' via.


    Che ne pensate?


    Haran

  2. #2
    una funzioncina no, ci sono le funzioni sulle date che fanno quello che dici, ti ci devi mettere un pò a lavorare... il secondo punto non ho capito che c'entra col primo.. non ho neanche capito perchè il primo lo devi dividere in quel modo...
    IP-PBX management: http://www.easypbx.it

    Old account: 2126 messages
    Oldest account: 3559 messages

  3. #3
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    Il primo ho pensato di dividerlo in quel modo poiche' devo caricare i dati in un database creato da altri nel quale il campo che dovrebbe contenere la data e' stato definito come char e le date vanno inserite in questo formato: 20010719 (YYYYMMDD).
    Non credo sia possibile effettuare una query con un intervallo unico se il range e' a cavallo di 2 o piu' mesi in quanto, gestendolo come data in php, nel database mi troverei valori come 20110735 (35 di luglio).
    Mi sto sbagliando? C'e' una soluzione piu' elegante?


    Il secondo problema si potrebbe intrecciare a volte col primo. Devo fare in modo che ogni lunedi' dell'intervallo temporale risulti Spiderman, ogni martedi' Superman ecc.



    Haran

  4. #4
    Potresti optare per una traduzione del formato yyyymmdd nel corrispondente timestamp e fatto questo ti crei una funzione per suddividere le date come tu hai indicato anche sfruttando la cal_days_in_month();

    per quello che vuoi ottenere è sufficiente avere:

    data nel formato yyyymmdd di partenza
    data nel formato yyyymmdd finale

    Per recuperare il mese, giorno ed anno è puoi benissimo utilizzare la date() con i parametri

    "d" per i giorni nel formato da 01 a 31
    "m" per i mesi da 01 a 12
    "Y" per il formato yyyy

    e come timestamp quello tradotto

  5. #5
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    cal_days_in_month() penso la usero', grazie.

    Ora, dovendo caricare il tutto nella tabella del mio db che OVVIAMENTE non ha una chiave primaria unica e che anche volendo creare un indice unico non e' possibile (troppi duplicati).
    A questo punto credo che l'unica soluzione (sebbene non particolarmente performante) sia quella cancellare i vecchi record e inserirne di nuovi.

  6. #6
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    Con questa semplice funzioncina ho generato il range di date necessario.
    Codice PHP:
    function dates_range($date1$date2) { 
       if (
    $date1<$date2) { 
           
    $dates_range[]=$date1
           
    $date1=strtotime($date1); 
           
    $date2=strtotime($date2); 
           while (
    $date1!=$date2) { 
               
    $date1=mktime(000date("m"$date1), date("d"$date1)+1date("Y"$date1)); 
               
    $dates_range[]=date('Ymd'$date1); 
           } 
       } 
       return 
    $dates_range

    Ora devo ottenere tutte le date nel range che corrispondono ad esempio ad un martedi'.

    Che ne dite se mettessi in if all'interno del while in modo da verificare di che giorno si tratta?
    Vi pare una soluzione efficiente?

  7. #7
    Un bel ciclo nell'array con tutte le date da processare ed una semplice if dove scriverai

    Codice PHP:
    if(date("D"$thisDate) == 'tue'){
    // questo giorno è martedì

    Fai prima una prova con una echo date("D", $thisDate) per vedere se le abbreviazioni sono in inglese o in italiano però e nel caso aggiorna il codice qui sopra...

  8. #8
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    Mi spiego meglio, ho un array cosi' strutturato:

    Codice PHP:
    $weekdays=array();
    $weekdays[0]='0';
    $weekdays[1]='1';
    $weekdays[2]='2';
    $weekdays[3]='3';
    $weekdays[4]='4';
    $weekdays[5]='5';
    $weekdays[6]='6'
    Ma potrebbe anche presentarsi in questo modo:
    Codice PHP:
    $weekdays=array();
    $weekdays[0]='';
    $weekdays[1]='5';
    $weekdays[3]='6';
    $weekdays[4]='4'
    oppure potrebbe anche essere vuoto.


    Quindi, prima di tutto devo verificare che non sia vuoto con:
    Codice PHP:
    if (is_array($hotel["weekday"])) {

    // Che ci metto qui?


    poi devo verificare i possibili casi. Se tutti i valori dallo 0 al 7 sono presenti oppure se tutti i nodi sono vuoti posso procedere al caricamento senza verificare che il giorno della settimana sia corretto.
    In caso contrasio, se cioe' solo alcuni valori sono inseriti (ad es. 5,6,4) devo fare il controllo durante la generazione del range di date passando quindi tali valori alla funzione dates_range() in modo da fare una match.

    Come mi consigliate di procedere?

  9. #9
    Utente di HTML.it
    Registrato dal
    Nov 2008
    Messaggi
    79
    Ho creato il primo controllo:
    Codice PHP:
    if (is_array($events["$weekdays"])) {
      if (
    in_array(array('1','2','3','4','5','6','0'), $events["$weekdays"])) {
        
    $weekdays 0;
      }
      else {
        
    $weekdays 1;
      }

    else {
      
    $weekdays=0;

    Il problema e' che mi restituisce $weekdays=1 anche quando tutti i valori sono presenti.

  10. #10
    Non è necessario tutto quel codice e procedura.
    Mi correggo... con il codice come hai scritto tu non riesci a capire se si tratta di martedì o altro giorno in quanto dovresti prima sapere quale è il primo giorno del mese in questione...

    Se un mese inizia con lunedì il 5° del mese sarà Venerdì, se però inizia con domenica sarà giovedì e così via...





    Se l'arrai è vuoto (count($array) < 1 oppure empty(array)) non fai nulla.

    Sfruttando le date che recuperi con un ciclo (l'ordine è trascurabile in questo caso), il mese e l'anno in questione hai una data nel formato gg/mm/yyyy che prima devi tradurre in timestamp e poi con la condizione

    if(date("D", $thisDate) == 'tue'){
    // questo giorno è martedì
    }

    verifichi se il giono in questione è martedì.

    $thisDate avrà la data tradotta in timestamp come richiesto nel secondo argomento della funzione date().

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.