2012-05-14 56 views
14

Estoy tratando de averiguar cómo puedo mostrar la fecha y hora dinámicas usando moment.js.Fecha y hora dinámicas con moment.js y setInterval

Aparentemente no puedo usar setInterval correctamente.

Si es posible, prefiero no usar jQuery ya que moment.js no lo necesita.

Esto es lo que tengo hasta ahora: 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); 
});​ 

Respuesta

21

He hecho algunas modificaciones en su código:

Tenga en cuenta que la actualización del método es ahora fuera del manejador de eventos ready código

:

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); 
}); 

demostración de trabajo: jsfiddle

+0

Realmente aprecio tu esfuerzo. ¡Gracias! – bchr

+2

actualizado con la versión más reciente de moment.js porque jsfiddle está roto: http://jsfiddle.net/timrpeterson/37fLF/217/ –

+0

Gracias por su maravilloso ejemplo. ¿Podría ayudarme a usar la hora UTC en lugar de la hora local para el mismo código? –

2

Ponga

date = moment(new Date()); 

dentro de la función de actualización. Ahora usted está imprimiendo la misma fecha cada segundo;)

+0

¡Muchas gracias! Funcionó;) PD: La primera línea de mi publicación debe ir al "Hola a todos, esta es mi primera publicación aquí". Traté de editarlo luego pero no se actualizó. – bchr

+0

Creo que necesitas algunos puntos antes de poder editar cosas. Creo que he podido presionarlo, pero podría ser solo para mí ... – Halcyon

+0

¿Cómo hago saltos de línea en los comentarios? ¿Sabes cómo puedo "escapar" de la cadena? Al igual que si me tienen: lunes por, 14a de mayo de 2012, 10:51:01 pm y desea salida, por ejemplo: lunes por, 14a de mayo de 2012, el momento es 10:51:01 pm Si escribo esto: ('dddd Do MMMM YYYY,' + 'el tiempo es' + 'h: mm: ss') "el tiempo es" se convierte en: t10e ti55e i01. – bchr

3

Una vez más, gracias por sus respuestas. El código con el que terminé sigue. (Nota i18n danés)

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); 
}); 

EDITAR: Aquí nueve meses después de que hice esta quesiton me di cuenta de esta manera de hacerlo sin jQuery (como en un principio me pregunté). Aquí está:

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(); 

Y luego, por supuesto utilizarlo con un ID de HTML como:

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

Esto es lo que pasa por mí y su mecanizado U puede comprobar aquí

HTML 

< asp: Label ID = "Label1" runat = texto "servidor" = ''>

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>