Autore: UMNW

  • Cascata di date correlate con JQuery e Datepicker

    Ok, oggi voglio partecipare la soluzione di un problema che si presenta con una certa frequenza quando si ha a che fare con le date ed è poco documentato in rete (io non ho trovato niente in proposito).

    Il problema è il seguente: legare due campi di tipo datepicker affinché la data immessa nel primo sia la data minima selezionabile del secondo.

    Ovviamente stiamo utilizzando la libreria JQuery e l'oggetto datepicker.

    Facciamo un esempio che aiuti la comprensione.

    Voglio registrare in due campi la data di partenza e la data di arrivo di una nave, ovviamente la data di partenza sarà inferiore alla data di arrivo e, per evitare errori da parte dell'operatore che registrerà le date, pretendo che non appena sia stata inserita la data di partenza, la data di arrivo sia maggiore o uguale di quella di partenza.

    Come possiamo fare con JQuery e datepicker?

    Il codice qui sotto vi fornisce tutto quello di cui avete bisogno, in testa alla pagina:

        <script type="text/javascript">
        //cambio dinamico del mindate
        $(document).ready(function()
            {
                $("input.datepicker").datepicker({maxDate:"today"});
                $("input#data_partenza").change(function()
                    {
                        var valore_data = $(this).val();
                        if(valore_data)$("input#data_arrivo").datepicker("option","minDate",valore_data);
                    }
                );
            });
        </script>
    

    E nel corpo di essa:

        <table>
            <thead>
                <tr>
                    <th colspan="2">
                        Gestione date
                    </th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>
                        Data di partenza
                    </td>
                    <td>
                        <input type="text" class="datepicker" id="data_partenza" />
                    </td>
                </tr>
                <tr>
                    <td>
                        Data di arrivo
                    </td>
                    <td>
                        <input type="text" class="datepicker" id="data_arrivo" />
                    </td>
                </tr>
            </tbody>
            <tfoot>
                <tr>
                    <td colspan="2">
                        <a href="https://blog.unmoscerinonelweb.com" target="_blank">unmoscerinonelweb.com</a>
                    </td>
                </tr>
            </tfoot>
        </table>
    
    

    In ogni caso potete visualizzare l'esempio funzionante e trarne spunto.

    Spero di essere stato di aiuto.

  • Javascript: setDate() non funziona! Differenza tra date

    Voglio condividere la risoluzione di un problema che mi si è presentato con l'uso dell'oggetto Date() di Javascript.

    Dovendo controllare che due date non fossero a più di 7 giorni di distanza l'una dall'altra ho pensato bene di utilizzare l'oggetto Date() ed il relativo metodo setDate().

    Pagina w3cschool del 07.10.2010In soldoni, prese data1 e data2 e assumendo che esse siano crescenti cronologicamente ho necessità di sapere se esse si distanziano per più di 7 giorni.

    Come suggerito in più "punti" del web, perfino dall'autorevole w3schools (come dimostra lo screenshot del 7 ottobre 2010), per incrementare una data di N giorni basta inserire +N all'interno del setDate.

    Questa cosa è più facile spiegarla fornendo il codice:

     

    ok? tutto bene…

    fate una prova e funziona tutto… giusto?

    Si, in effetti la cosa funziona bene quando dobbiamo aggiungere 5 giorni (seguo l'esempio) alla data corrente (oggi), ma se dobbiamo creare una data sulla base di una data passata?

    Mi spiego meglio:

    mettiamo che il nostro myDate dell'esempio non sia la data corrente, ma una data del passato (12 agosto 1991) e  che vogliamo creare una nuova data, 5 giorni più vecchia di myDate, nell'esempio myOffsetDate questo è quello che saremmo portati a fare:

     

    quello che mi aspetto è che la mia variabile myOffsetDate, diventi uguale a myDate +5 giorni, ovvero 17 agosto 1991, ma quello che succede è tutt'altro! Oggi, 7 ottobre 2010, myOffsetDate diventerebbe 17 ottobre 2010! Oggi 20 dicembre 2010, myOffsetDate diventerebbe 17 dicembre 2010!

    In pratica il comando setDate aggiunge 5 giorni a myDate e li assegna a myOffsetDate, ma ignorando completamente il mese e l'anno che così rimangono quelli dell'inizializzazione ( new Date(); ).

    Allora come facciamo a risolvere questo drammatico problema? Semplicemente utilizzando altri metodi che vengono in nostro soccorso: setMonth() e setFullYear().

    Soluzione!

    Tornando al problema originariamente posto, volendo verificare se due date siano sfasate per più di 7 giorni potremmo scrivere:

     

    Grazie ai metodi setMonth() e setFullYear() riusciamo ad ottenere il risultato sperato.

    Spero di essere stato sufficientemente esaustivo e soprattutto utile a quanti si trovino ad affrontare questo problema.

  • Drupal, nascondere o mostrare le “Opzioni di pubblicazione”

    opzioni di pubblicazione drupalL'amministratore di un sito in Drupal quando crea un contenuto può decidere, tra le altre cose, se pubblicarlo, promuoverlo in prima pagina e tenerlo fisso in prima pagina attraverso le "Opzioni di pubblicazioni", che di default è posizionato in fondo alla pagina di creazione/modifica del contenuto.

    Ma come fare per dare, o eventualmente togliere, questa possibilità ad un utente del sito diverso dall'amministratore?

    Andando nella gestione dei permessi (admin/user/permissions) non vediamo nessun riferimento alle "Opzioni di pubblicazione", eppure possiamo facilmente concedere o revocare questo permesso mediante la voce "Amministra Nodi".

    Amministra nodi Drupal

    Una volta operata questa scelta e dopo aver salvato, quando verrà creato o modificato un nuovo contenuto, sarà possibile scelgiere le "Opzioni di pubblicazione", ovvero: Pubblicato, Promosso in prima pagina e Fisso in cima alla lista.

    Spero che queste info possano essere di aiuto a qualcuno, perché la cosa, sebbene sia molto semplice, non è affatto intuitiva.