如何在我的网页上每分钟更新所选时区的时间?

时间:2015-09-30 13:41:43

标签: javascript jquery datetime momentjs

我有一个jquery函数,它使用moment.js根据客户端系统中的时钟计算不同时区的时间:

function updateTime(){
                var chicago = moment.tz("America/Chicago").format('h:mm:ss A');
               $('#time').html( chicago +", ");
            };

            moment.tz.add('America/Chicago|CST CDT|60 50|01010101010101010101010|1BQU0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Rd0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0 Op0 1zb0');                                                                         

            updateTime();
            setInterval(function(){
               updateTime();
            },1000);

它工作得很好,但是当用户更改系统时钟时,则时刻显示错误的时间。我发现我可以从服务器(通过php)获取时间戳,并将其用作更新客户端网页上的时间的开始时间。我试着编写如下脚本:

function updateTimeBasedOnServer(){
                var timestamp = 1443618723;
                var Chicago = new Date(timestamp);
                var dateString = Chicago.format('h:mm:ss A');
               $('#time2').html( dateString +", ");
            };


            updateTimeBasedOnServer();
            setInterval(function(){
               updateTimeBasedOnServer();
            },1000);

但它不起作用。我希望得到与运行第一个脚本后相同的结果,但只是区别在于它独立于系统中用户的时钟。我怎样才能做到这一点? 这是我的小提琴: http://jsfiddle.net/b8o5cvdz/9/

2 个答案:

答案 0 :(得分:1)

这里有一个错误:

function updateTimeBasedOnServer(){
            var timestamp = 1443618723;
            var Chicago = new Date(timestamp); // Here you create a Date object
            var dateString = Chicago.format('h:mm:ss A'); // a Date object does not have a 'format' method. A moment.js object has it.
           $('#time2').html( dateString +", ");
};

要修复它,请使用moment.js对象:

function updateTimeBasedOnServer() {
    var timestamp = 1443618723;
    var Chicago = moment(timestamp); // <- Here I create a moment.js object from the time stamp
    var dateString = Chicago.format('h:mm:ss A');
    $('#time2').html(dateString + ", ");
};

在这里,您可以找到包含工作代码的JSFiddle

在评论中回答第二个问题:

  

谢谢,还有一件事 - 第二个日期不会每秒刷新一次 -   有没有办法解决它?

您不应该在updateTimeBasedOnServer()内对时间戳值(1443618723)进行硬编码,因为在每次调用时它都会使用该值。因此,您没有看到时间变化。

要解决此问题,请将时间戳移到方法之外:

function updateTimeBasedOnServer(timestamp) { // Take in input the timestamp
    var Chicago = moment(timestamp);
    var dateString = Chicago.format('h:mm:ss A');
    $('#time2').html(dateString + ", ");
};

var timestamp = 1443618723;
updateTimeBasedOnServer(timestamp);
setInterval(function () {
    timestamp += 1000; // Increment the timestamp at every call.
    updateTimeBasedOnServer(timestamp);
}, 1000);

使用更新的代码查找JSFiddle

答案 1 :(得分:0)

您需要在Date对象上使用.toTimeString()或类似内容,而不是.format

function updateTimeBasedOnServer(){
            var timestamp = 1443618723;
            var Chicago = new Date(timestamp);
            var dateString = Chicago.toTimeString();
           $('#time2').html( dateString +", ");
        };

Updated fiddle