2012-05-14 4 views
14

Я пытаюсь выяснить, как я могу отображать динамические дату и время с помощью moment.js.Динамическая дата и время с моментами.js и setInterval

По-видимому, я не могу правильно использовать setInterval.

Если возможно, я бы предпочел не использовать jQuery как moment.js, не нужен.

Вот что у меня есть: 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); 
});​ 

ответ

21

Я сделал несколько изменений в коде:

Обратите внимание, что обновление метод теперь вне обработчика событий ready

код:

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

работает демо: jsfiddle

+0

Я очень ценю ваши усилия. Спасибо! – bchr

+2

обновлен с новой версией момента. Js, потому что jsfiddle нарушен: http://jsfiddle.net/timrpeterson/37fLF/217/ –

+0

Спасибо за прекрасный пример. Не могли бы вы помочь мне использовать время UTC, а не местное время для того же кода. –

2

Помещенный

date = moment(new Date()); 

внутри функции обновления. Теперь вы просто печатать ту же дату каждый второй;)

+0

Большое спасибо! Это сработало;) PS: Первая строка моего сообщения должна идти «Привет всем - это мой первый пост здесь». Я попытался изменить его впоследствии, но он не обновился. – bchr

+0

Думаю, вам нужно несколько очков, прежде чем вы сможете редактировать материал. Я думаю, что мне удалось нажать, но это может быть просто для меня. – Halcyon

+0

Как сделать перерывы в комментариях? Знаете ли вы, как я могу «убежать» от строки? Как, если у меня есть: Понедельника, 14 Мая 2012, 10:51:01 вечер И хочу вывести, например: понедельника, 14 мая 2012, время 10:51:01 вечер Если я пишу это: ('dddd Do MMMM YYYY,' + 'время «+» h: mm: ss') «время» становится: t10e ti55e i01. – bchr

3

Опять же, спасибо за ваши ответы. Код, в который я закончил, следует. (Примечание датский i18n)

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: Вот девять месяцев после того, как я задал этот quesiton я понял, это способ сделать это без JQuery (как я сначала спросил). Вот оно:

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

И тогда, конечно, использовать его с HTML-ID, как:

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

Это, как он идет мимо меня и его рабочий и может проверить его здесь

HTML 

< осины: Этикетка ID = Runat = "сервер" Текст "Label1" = ''>

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>