我有一个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/
答案 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 +", ");
};