Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 20
  1. #1

    Timer countdown di 1 giorno

    salve, sto creano un programma in c#, in una funzione ho bisogno di creare un file .html in cui ci sia un countdown di 1 giorno.
    Esempio = avvio funzione --> il programma legge l'orario del pc (6:00) --> crea la pagina html con un countdown di 1 giorno (6:00 del giorno dopo). Il problema che ho, è nell'ultimo passaggio (il codice da mettere nel file .html) in cui non so proprio dove mettere mani, html l'ho sempre un pò usato ma non a questi livelli di javascript e online non trovo nulla che mi possa aiutare.
    Grazie

  2. #2
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    prima questione:
    il countdown dev'essere reale?
    ovvero partire dall'esecuzione del file html?

    di esempi di countdown ce ne sono decine, si tratta di passare il valore iniziale di partenza e poi lo script js continuerà a fare il suo sporco lavoro. salvo che tu non abbia bisogno di un aggiornamento "in tempo reale" da parte del server, che complica un po' le cose, devo solo passare un parametro.

  3. #3
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    prima questione:
    il countdown dev'essere reale?
    ovvero partire dall'esecuzione del file html?

    di esempi di countdown ce ne sono decine, si tratta di passare il valore iniziale di partenza e poi lo script js continuerà a fare il suo sporco lavoro. salvo che tu non abbia bisogno di un aggiornamento "in tempo reale" da parte del server, che complica un po' le cose, devo solo passare un parametro.
    Si dovrebbe partire al primo avvio del file html ma poi continuare anche se è chiuso, non so neanche se sia possibile.
    Dovrebbe funzionare così:
    1 il programma inserisce nel codice l'orario di partenza e avvia .html per la prima volta.
    2 il countdown parte
    3 il file .html viene chiuso dall'utente
    4 alla riapertura dello stesso file .html il file dovrebbe scalare a quanto è passato ad esempio se ho chiuso il file alle 7:00 e mancavano 2 ore e lo riaperto alle 8:00 il countdown deve dire che manca 1 ora non più 2

    Tutto questo è possibile o devo cambiare metodo?

  4. #4
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    il concetto di base:
    il client, invocando il file html, deve ottenere il valore di partenza e di fine.
    js si occuperà di far vedere lo scorrere del tempo.

    il valore di partenza glielo devo dare tu (visto che l'orologio del client non è affidabile), e pure quello di fine.
    quindi, invocando il file html, immagino che tu scriva (con c#) i valori nel file prima di servirlo.
    questa è normale prassi.

    nel caso specifico: il valore di partenza è quello della creazione onthefly del file html che il client invoca.
    non serve tenere traccia di altro.

  5. #5
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    il concetto di base:
    il client, invocando il file html, deve ottenere il valore di partenza e di fine.
    js si occuperà di far vedere lo scorrere del tempo.

    il valore di partenza glielo devo dare tu (visto che l'orologio del client non è affidabile), e pure quello di fine.
    quindi, invocando il file html, immagino che tu scriva (con c#) i valori nel file prima di servirlo.
    questa è normale prassi.

    nel caso specifico: il valore di partenza è quello della creazione onthefly del file html che il client invoca.
    non serve tenere traccia di altro.
    si e fin qua ci sono, il problema è che io non ho mai studiato html e js, sono alle basi e siccome mi serve fare solo questa cosa non ho tempo di iniziare a studiarmi tutto, quindi in poche parole anche se è brutto da dire sto cercando un codice già fatto e pronto

  6. #6
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    fatto pronto c'è poco da far fatica... decine di esempi in rete dovrebbero bastare
    dove sono le tue perplessità?

    fare una ricerca di esempi da proporti mi sembra inutile...

    riesci a creare il file html "vuoto" e scriverci i due valori?

  7. #7
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    fatto pronto c'è poco da far fatica... decine di esempi in rete dovrebbero bastare
    dove sono le tue perplessità?

    fare una ricerca di esempi da proporti mi sembra inutile...

    riesci a creare il file html "vuoto" e scriverci i due valori?
    si dal punto di vista di c# riesco a fare tutto, scrivere i due valori non è un problema, ho già fatto una ricerca ma trovo solo countdown con delle date e non riesco a impostarli per fare quello che mi serve

  8. #8
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    ok, prova a cerca un countdown che si addica al progetto. ovvero che ci siano sia la data che l'ora di scadenza, poi riportalo che ti diamo una mano a settarlo.

  9. #9
    Quote Originariamente inviata da Vincent.Zeno Visualizza il messaggio
    ok, prova a cerca un countdown che si addica al progetto. ovvero che ci siano sia la data che l'ora di scadenza, poi riportalo che ti diamo una mano a settarlo.
    Ho trovato questo script e funziona, però non so dove mettere mani per poter cambiare i valori
    codice:
    <script type="text/javascript">var CDown = function() {
        this.state=0;// if initialized
        this.counts=[];// array holding countdown date objects and id to print to {d:new Date(2013,11,18,18,54,36), id:"countbox1"}
        this.interval=null;// setInterval object
    }
    
    
    CDown.prototype = {
        init: function(){
            this.state=1;
            var self=this;
            this.interval=window.setInterval(function(){self.tick();}, 1000);
        },
        add: function(date,id){
            this.counts.push({d:date,id:id});
            this.tick();
            if(this.state==0) this.init();
        },
        expire: function(idxs){
            for(var x in idxs) {
                this.display(this.counts[idxs[x]], "Now!");
                this.counts.splice(idxs[x], 1);
            }
        },
        format: function(r){
            var pre='',post='',divide=', ',
                out="";
            if(r.d != 0){out += pre+r.d +" "+((r.d==1)?"day":"days")+post+divide;}
            if(r.h != 0){out += pre+r.h +" "+((r.h==1)?"hour":"hours")+post+divide;}
            out += pre+r.m +" "+((r.m==1)?"min":"mins")+post+divide;
            out += pre+r.s +" "+((r.s==1)?"sec":"secs")+post+divide;
    
    
            return out.substr(0,out.length-divide.length);
        },
        math: function(work){
            var    y=w=d=h=m=s=ms=0;
    
    
            ms=(""+((work%1000)+1000)).substr(1,3);
            work=Math.floor(work/1000);//kill the "milliseconds" so just secs
    
    
            y=Math.floor(work/31536000);//years (no leapyear support)
            w=Math.floor(work/604800);//weeks
            d=Math.floor(work/86400);//days
            work=work%86400;
    
    
            h=Math.floor(work/3600);//hours
            work=work%3600;
    
    
            m=Math.floor(work/60);//minutes
            work=work%60;
    
    
            s=Math.floor(work);//seconds
    
    
            return {y:y,w:w,d:d,h:h,m:m,s:s,ms:ms};
        },
        tick: function(){
            var now=(new Date()).getTime(),
                expired=[],cnt=0,amount=0;
    
    
            if(this.counts)
            for(var idx=0,n=this.counts.length; idx<n; ++idx){
                cnt=this.counts[idx];
                amount=cnt.d.getTime()-now;//calc milliseconds between dates
    
    
                // if time is already past
                if(amount<0){
                    expired.push(idx);
                }
                // date is still good
                else{
                    this.display(cnt, this.format(this.math(amount)));
                }
            }
    
    
            // deal with any expired
            if(expired.length>0) this.expire(expired);
    
    
            // if no active counts, stop updating
            if(this.counts.length==0) window.clearTimeout(this.interval);
            
        },
        display: function(cnt,msg){
            document.getElementById(cnt.id).innerHTML=msg;
        }
    };
    
    
    window.onload=function(){
        var cdown = new CDown();
    
    
        cdown.add(new Date(2017,1,16,19,43,46), "countbox1");
    };
    </script>
    <div id="countbox1"></div>

  10. #10
    Amministratore L'avatar di Vincent.Zeno
    Registrato dal
    May 2003
    residenza
    Emilia-Romagna (tortellini und cappelletti land!)
    Messaggi
    20,649
    lo script in questione mostra chiaramente la scadenza:
    codice:
    cdown.add(new Date(2017,1,15,20,57,30), "countbox1")
    dove puoi distinguere chiaramente: (anno,mese,giorno,ora,minuti,secondi)
    puoi settare i valori a tuo piacimento

    al termine (expire) entra in gioco la funzione idxs che stampa la parola Now!
    codice:
    this.display(this.counts[idxs[x]], "Now!")
    ovviamente puoi scriverci quello che serve a te, anche html


    il difetto di questo script è che si basa sull'orologio del client. quindi, se mal regolato, il timer diventa aleatorio.
    nel tuo progetto quanta importanza ha la precisione dell'ora? è qualcosa che assolutamente non deve essere arbitraria o "vabbene-lo-stesso"?
    Ultima modifica di Vincent.Zeno; 15-02-2017 a 22:11

Tag per questa discussione

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 © 2024 vBulletin Solutions, Inc. All rights reserved.