【发布时间】:2013-12-10 00:13:43
【问题描述】:
我试图在启动时获取服务器时间并更新它,因为我必须实时控制一些元素。问题是,如果我的serverTime 没有 T,则 firefox 和 IE 上的时间是 NaN,但如果我用 chrome 和 IE 上的 T 替换空白空间,我的时间就错了。
我现在用 T 替换空白的解决方法很糟糕,但我已经没时间了 :)
谢谢大家
开始时:
$tmpTime = date("Y-m-d H:i:s");
头:
<script>
var serverTime = '<?=$tmpTime?>';
serverTime = serverTime.replace(" ", "T");
</script>
脚本:
setInterval(function () {
console.log(serverTime);
var tmpTime = new Date(serverTime);
console.log(tmpTime);
var t = tmpTime.getTime();
t = t + 1000;
tmpTime = new Date(t);
serverTime = t;
if (tmpTime.getMinutes() < 10) {
var minutes = "0" + tmpTime.getMinutes();
} else {
var minutes = tmpTime.getMinutes();
};
newTime = tmpTime.getHours() + ":" + minutes;
$('#liveTime').text(newTime);
if ($("#program li[time-id='" + newTime + "'][class='alert']").length !== 0) {
alert("Lo streaming da te programmato sta per iniziare!");
$("#program li[time-id='" + newTime + "'][class='alert']").removeClass("alert");
}
titleToShow();
}, 1000);
function titleToShow() {
$("#program li").each(function () {
var prevTime = $(this).prev("li").attr("time-id");
var thisTime = $(this).attr("time-id");
var nextTime = $(this).next("li").attr("time-id");
currentTime = Date.parse('01/01/2011 ' + newTime);
prevTime = Date.parse('01/01/2011 ' + prevTime);
nextTime = Date.parse('01/01/2011 ' + nextTime);
thisTimeNew = Date.parse('01/01/2011 ' + thisTime);
if (currentTime >= thisTimeNew && currentTime < nextTime && currentTime > prevTime) {
title = $(this).find("p").text();
if (title != $("p#playingTitle").text()) {
$("p#playingTitle").text(title);
}
}
})
}
【问题讨论】:
-
直到 ES5,Date 构造函数对字符串的解析完全依赖于实现。 ES5 定义了一个version of ISO 8601,但并非所有正在使用的浏览器都支持它,并且 OP 中没有“T”的字符串不兼容。 CBroe 的回答中描述了最跨浏览器和向后兼容的方法,它应该适用于任何适度兼容的 ECMAScript 实现。
标签: javascript jquery date nan