2012-05-14 4 views
14

Sto cercando di scoprire come visualizzare data e ora dinamiche utilizzando moment.js.Data e ora dinamiche con moment.js e setInterval

Apparentemente non riesco a capire di utilizzare setInterval correttamente.

Se possibile, preferirei non utilizzare jQuery come moment.js non ne ha bisogno.

Ecco quello che ho finora: http://jsfiddle.net/37fLF/2/.

$(document).ready(function() { 
    var datetime = $('#datetime'), 
     date = moment(new Date()), 
     update = function(){ 
      datetime.html(date.format('dddd, MMMM Do YYYY, h:mm:ss a')); 
     }; 
    update(); 
    setInterval(update, 1000); 
});​ 

risposta

21

Ho fatto alcune modifiche nel codice:

Si noti che il metodo update è ora al di fuori del gestore di eventi ready codice

:

var datetime = null, 
     date = null; 

var update = function() { 
    date = moment(new Date()) 
    datetime.html(date.format('dddd, MMMM Do YYYY, h:mm:ss a')); 
}; 

$(document).ready(function(){ 
    datetime = $('#datetime') 
    update(); 
    setInterval(update, 1000); 
}); 

demo funzionante: jsfiddle

+0

Apprezzo davvero il tuo impegno. Grazie! – bchr

+2

aggiornato con la versione più recente di moment.js perché il jsfiddle è rotto: http://jsfiddle.net/timrpeterson/37fLF/217/ –

+0

Grazie per il tuo meraviglioso esempio. Potresti aiutarmi a utilizzare l'ora UTC anziché l'ora locale per lo stesso codice. –

2

Mettere

date = moment(new Date()); 

all'interno della funzione di aggiornamento. Ora stai solo la stampa della stessa data ogni secondo;)

+0

Grazie mille! Ha funzionato;) PS: La prima riga del mio post dovrebbe andare "Ciao a tutti - questo è il mio primo post qui". Ho provato a modificarlo in seguito ma non si aggiornava. – bchr

+0

Penso che tu abbia bisogno di alcuni punti prima di poter modificare le cose. Penso di essere stato in grado di spingerlo, ma potrebbe essere solo per me .. – Halcyon

+0

Come faccio a fare delle interruzioni di riga nei commenti? Sai come posso "sfuggire" alla stringa? Come se ho: Lunedi, 14 ° Maggio 2012, 22:51:01 e vogliono in uscita, ad esempio: Lunedi, 14 maggio 2012, il tempo è 22:51:01 Se scrivo questo: ('dddd Do MMMM YYYY,' + 'l'ora è' + 'h: mm: ss') "il tempo è" diventa: t10e ti55e i01. – bchr

3

Ancora una volta, grazie per le vostre risposte. Segue il codice con cui ho finito. (Nota i18n danese)

moment.lang('da'); 

var datetime = null, date = null; 

var datetime_update = function() { 
    date = moment(new Date()); 
    datetime.html(date.format('[Lige nu: ] dddd [d.] Do MMMM YYYY [kl.] HH:mm:ss')); 
}; 

$(document).ready(function() { 
    datetime = $('#datetime'); 
    datetime_update(); 
    setInterval(datetime_update, 1000); 
}); 

EDIT: Qui nove mesi dopo che ho chiesto questo quesiton ho capito in questo modo per farlo senza jQuery (come inizialmente ho chiesto). Eccolo:

function date_time() { 
    now = moment().format('dddd [d.] Do MMMM YYYY [kl.] HH:mm:ss'); 
    document.getElementById('timer').innerHTML = now; 
    setTimeout(function() { date_time(); }, 1000); 
} 
date_time(); 

E poi, naturalmente, usarlo con un ID HTML come:

<span id="timer"></span> 
0

questo è come va da me e il suo lavoro U può controllare qui

HTML 

< asp: ID Label = "Label1" runat = Testo "server" = ''>

JavaScript 
< script language="javascript" type="text/javascript"> 
function date_time() 
{ 
var dt = new Date(); 
document.getElementById('<%=Label1.ClientID%>').innerHTML = dt; 
setTimeout(function() { date_time(); }, 1000); 
} 
date_time(); 
< /script>