【问题标题】:new Date return NaN or a wrong time starting from server date()new Date 返回 NaN 或从服务器 date() 开始的错误时间
【发布时间】: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


【解决方案1】:

不要使用 格式化 日期,只需将 Unix 时间戳值传递给脚本(不要忘记将其乘以 1000,因为 JS 使用毫秒)。

var serverTime = <?php echo time(); ?>;
var tmpTime = new Date(serverTime * 1000);

【讨论】:

  • 非常感谢,它现在可以在 chrome 和 Firefox 上运行,但 IE 仍然有问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 2018-08-24
  • 1970-01-01
相关资源
最近更新 更多