我对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进行了检查,所有地点都显示不同的时间,而非丹麦当前时间。
答案 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>