Visualizzazione dei risultati da 1 a 7 su 7
  1. #1
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975

    Manipolazione data/orario

    Ciao e bentrovati.

    Spero avere il vostro aiuto.

    In un form ho due campi dove viene inserita questa stringa:

    dd/mm/yyyy HH:MM

    Avrei bisogno di:

    1) Controllare che la stringa sia sempre appunto composta dall'anno nel formato dd/mm/yyyy e l'orario nel formato HH:MM ( forse una regular expression? );

    2) Controllare che la stringa inserita nel campo 2 del form sia sempre superiore di quella inserita nel campo 1, tenendo conto di data ed orario;

    3) Calcolare in minuti la differenza tra le due stringhe inserite.

    Aspetto vostri suggerimenti.
    Grazie
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  2. #2
    Allora:

    1)
    Puoi usare una RegualExpression: /[\d]{2}\/[\d]{2}\/[\d]{4}\ [\d]{2}:[\d]{2}/

    Usando la funzione test() della regexp puoi controllare se la stringa è sintatticamente corretta.

    La notazione corretta è:

    codice:
    var dateTester = /[\d]{2}\/[\d]{2}\/[\d]{4}\ [\d]{2}:[\d]{2}/;
    
    var testResult = dataTester.test(strFromInput);
    2)
    Per fare questo devi prima di tutto parsare un oggetto Date per ogni campo, a partire dai dati inseriti. Poi utilizzi la funzione di date getTime() per ottenere il timestamp dell'oggetto Date (numero di millisecondi dal 1/1/1970) allora ti basta controllare se il timestamp della seconda è maggiore di quello della prima.

    Per il parser, mi faccio un po' di pubblicità: ho scritto una serie di migliorie per l'oggetto Date (multibrowser tra l'altro) e i due metodo principali servono per formattare un oggetto Date in una stringa e per ottenere un oggetto Date da una stringa.

    Trovi la documentazione qui: http://artorius.netsons.org/new/inde...:web&Itemid=15

    Mentre la pagina di download, con esempi, qui: http://artorius.netsons.org/dateextras/ (la pagina è in inglese per comodità di internazionalizzazione).

    Usando i date extras ti basta fare:

    codice:
    var myDate = Date.parseFromFormat(strFromInput, "%d/%m/%Y %H:%i");
    Ed in myDate ottieni l'oggetto Date corrispondente.

    3)
    Per questo ti basta fare un pelo di operazioni su il getTime delle due date:

    codice:
    var diff = date2.getTime() - date1.getTime();
    var minutes = Math.floor(diff / 60 / 1000); //getTime da i millisecondi per questo / 1000, poi per i minuti / 60, il Math.floor() ottiene la base di un numero, tipo 12.22 ottiene 12
    I DON'T Double Click!

  3. #3
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    Ti ringrazio x i suggerimenti, ma sono bloccato al punto 1...

    codice:
    <html>
    
    <head>
    
    <script language="JavaScript">
    
    function checkDate(form){
       
       var DataOraInizio = form.DataOraInizio.value;
       var DataOraFine = form.DataOraFine.value;
       
       var dateTester = /[\d]{2}\/[\d]{2}\/[\d]{4}\ [\d]{2}:[\d]{2}/;  
       
       if(!DataOraInizio || !dateTester.test(DataOraInizio)){
           alert("Formato non valido A.");
           form.DataOraInizio.focus();
           form.DataOraInizio.select();
           return false;
       }
       
    
       if(!DataOraFine || !dateTester.test(DataOraFine)){
           alert("Formato non valido B.");
           form.DataOraFine.focus();
           form.DataOraFine.select();
           return false;
       }   
    
    } 
    </script>
    
    <script language="JavaScript" src="ts_picker.js">
    </script>
    
    </head>
    
    <body>
    
    <form name="form" method="POST" action="index.htm" onsubmit="return(checkDate(this) && confirm('Confermi ?'));">
    
    	
    
    <input type="text" name="DataOraInizio" size="18">
    	<a href="javascript:show_calendar('document.form.DataOraInizio', document.form.DataOraInizio.value);">
        [img]cal.gif[/img]</a> Data Ora Inizio (A)</p>
        
    	
    
    <input type="text" name="DataOraFine" size="18">
    	<a href="javascript:show_calendar('document.form.DataOraFine', document.form.DataOraFine.value);">
        [img]cal.gif[/img]</a> Data Ora Fine ( B)</p>
        
    	
    
    <input type="text" name="Differenza" size="18"> Differenza (B-A)</p>	
    	
    
    <input type="submit" value="Invia" name="B1"></p>
    	
    </form>
    
    </body>
    
    </html>
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  4. #4
    Ma guarda, che a me quello che hai scritto funziona...
    I DON'T Double Click!

  5. #5
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    Originariamente inviato da artorius
    Ma guarda, che a me quello che hai scritto funziona...
    Si funziona... intendo bloccato perchè non so come proseguire sui punti 2 e 3 con la documentazione che mi hai suggerito...

    il punto 1 è chiuso perchè va bene...
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

  6. #6
    ti ho consigliato di scaricarti il mio date extras apposta per questo. importi lo script nella pagina e poi fai:

    codice:
    function checkDate(form){
       
       //Il tuo codice
    
       //Trasformo la stringa nell'oggetto Date corrispondente
       DataOraInizio = Date.parseFromFormat(DataOraInizio, "%d/%m/%Y %H:%i");
       DataOraFine = Date.parseFromFormat(DataOraFine, "%d/%m/%Y %H:%i");
    
       //Controllo che la data di fine non sia DOPO la data d'inizio
       if(DataOraFine.getTime() < DataOraInizio.getTime()){
           alert("La data di fine è PRIMA della data d'inizio");
           form.DataOraFine.focus();
           form.DataOraFine.select();
           return false;
       }
    
       //Se arrivo qui vuoi dire che la data di fine è dopo la data d'inizio.
       //Calcolo l'intervallo tra le due in minuti.
       var diff = DataOraFine.getTime() - DataOraInizio.getTime();
       var minutes = Math.floor(diff / 1000 / 60);
    
       //Fai con la data dei minuti quello che vuoi
    }
    I DON'T Double Click!

  7. #7
    Utente di HTML.it L'avatar di Luis33
    Registrato dal
    May 2003
    Messaggi
    975
    OK grazie a buon rendere !
    ... Sono graditi codes, esempi pratici, suggerimenti, consigli e critiche...
    "Ai posteri l'ardua sentenza..."
    Tante grazie
    Saluti
    Luis 33

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.