在丹麦永远显示时间的moment.js时钟

时间:2017-01-14 14:14:51

标签: javascript time momentjs

我对moment.js有一个小问题

我想做的是制作一个始终在网站上显示丹麦当前时间的时钟,无论客户端从哪里加载我的网站。

这是我的脚本(没有html):

$( document ).ready(function() {

    startTime();

});

function startTime() {
    var today = new Date( moment().tz("europe/copenhagen") ); 
    var y = today.getFullYear();
    var mm = today.getMonth();
    mm = mm + 1;
    var d = today.getDate();
    var h = today.getHours();
    var m = today.getMinutes();
    var s = today.getSeconds();
    m = checkTime(m);
    s = checkTime(s);
    document.getElementById('watch2').innerHTML =
    h + ":" + m + ":" + s;
    document.getElementById('watch1').innerHTML =
    d + "/" + mm + "/" + y;
    var t = setTimeout(startTime, 500);
}

function checkTime(i) {
    if (i < 10) {i = "0" + i};
    return i;
}

我已经使用www.geopeeker.com进行了检查,所有地点都显示不同的时间,而非丹麦当前时间。

1 个答案:

答案 0 :(得分:1)

您使用的是原生JavaScript日期对象,而不是利用moment-timezone

请注意,new Date(dateString);按当地时间here (MDN)

提供时间
  

注意:如果将Date作为具有多个参数的构造函数调用,则指定的参数表示本地时间。如果需要UTC,请使用具有相同参数的n ew Date(Date.UTC(...))

在你的情况下,最好使用时刻对象并删除原生JavaScript对象。

此外,你可以使用片刻format()而不是自己计算如何显示时间。

这是一个有效的解决方案:

function startTime() {
  var today = moment.tz("Europe/Copenhagen"); 
  document.getElementById('watch2').innerHTML = today.format('HH:mm:ss');
  document.getElementById('watch1').innerHTML = today.format('DD/MM/YYYY');
  var t = setTimeout(startTime, 500);
}

startTime();
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment.js/2.17.1/moment.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/moment-timezone/0.5.7/moment-timezone-with-data-2010-2020.min.js"></script>

<div id="watch1"></div>
<div id="watch2"></div>