【问题标题】:Time show Nan:Nan in Firefox, Chrome works perfect时间秀 Nan:Nan 在 Firefox 中,Chrome 完美运行
【发布时间】:2013-04-20 13:36:13
【问题描述】:

这是我在 Google Chrome 中的输出:

这是我在 Firefox 中的输出:

这是我的功能:

    function LoadSessions()
{ //LOAD SESSIONS FROM LOCALSTORAGE
    var retrievedObject = localStorage.getItem('session');

    // CALL FUNCTION
    parsePerObject(JSON.parse(retrievedObject));

    function parsePerObject(data)
    {
        // Turn the data object into an array
        var dataArray = [];
        $.each(data, function (key, value){
            dataArray.push(value);
        });

        // Sort data by starttime
        dataArray.sort(function (a, b) {
            if (a.starttime > b.starttime) return 1;
            if (a.starttime < b.starttime) return -1;
            return 0;
        });

        // Array with days of the week    
        var d_names = ["Sunday", "Monday", "Tuesday",
        "Wednesday", "Thursday", "Friday", "Saturday"];

        // Array with months of the year    
        var m_names = ["January", "February", "March", 
        "April", "May", "June", "July", "August", "September", 
        "October", "November", "December"];

        // Variables
        var content = "",
            dates = [], 
            date = {};

        // LOOP OBJECTS
        $.each(dataArray, function(i, item)
        {
            // Date
            var d = new Date(item.starttime);

            var year = d.getFullYear();
            var month = d.getMonth();
            var day = d.getDate();
            var da = d.getDay();

            date.value = year + "-" + month + "-" + day;

            // Startime & endtime
            var starttime = new Date(item.starttime);
            var endtime = new Date(item.endtime);

            var hour_starttime = starttime.getHours();
            var min_starttime = starttime.getMinutes();

            var hour_endtime = endtime.getHours();
            var min_endtime = endtime.getMinutes();

            // 12:00 instead of 12:0
            if(min_starttime < 10) min_starttime += "0";  
            if(min_endtime < 10) min_endtime += "0";

            // Loop dates
            $(date).each(function() 
            {
                // If the date is not in array dates
                if($.inArray(date.value, dates) == -1)
                {
                    date.firstchild = item.id;

                    content = "<div class='span6'><h2 id='" + item.id + "'" + " class='before-blocks'>" + d_names[da] + " " + day + " " + m_names[month] + " " + year + "</h2>";
                    content += "<ul class='sessionlist blocks unstyled'>";
                    content += "<li id='item" + item.id + "' class='contentblock has-thumb'>";
                    content += "<a href='/sessions/view/" + item.id + "'>";
                    content += hour_starttime + ":" + min_starttime + " - " + hour_endtime + ":" + min_endtime;
                    content += "<span class='ellipsis name' style='width: 95%;'><b>" + item.name + "</b></span>";
                    content += "<span class='ellipsis'><em>" + item.speaker + "</em></span></a></li>";
                    $("#here").append(content);

                    // Add date to dates 
                    dates.push(date.value);
                }

                // If the date is in array dates
                else
                {
                    var second = "<li id='item" + item.id + "' class='contentblock has-thumb'>";
                    second += "<a href='/sessions/view/" + item.id + "'>";
                    second += hour_starttime + ":" + min_starttime + " - " + hour_endtime + ":" + min_endtime;
                    second += "<span class='ellipsis name' style='width: 95%;'><b>" + item.name + "</b></span>";
                    second += "<span class='ellipsis'><em>" + item.speaker + "</em></span></a></li>";
                    $("#item" + date.firstchild).parent().append(second);    // Add li to parent (ul) of previous li
                }
                content = "</ul></div>";
                $("#here").append(content);
            });
        }); 
    }
}

在我的 localStorage 中,我有这样的对象:

{"21216":{"id":"21216","external_id":"","sessiongroupid":"1861","eventid":"5588","order":"0","name ":"RESTful 使用 ZF2 轻松实现服务","description":"需要了解 ZF2? 并实现这些功能中的每一个。","starttime":"2013-01-25 09:00:00","endtime":"2013-01-25 12:30:00","speaker":"Matthew Weier O'Phinney, Rob Allen","location":"教程 房间","mapid":"0","xpos":"0.000000","ypos":"0.000000","maptype":"plan","imageurl":"","presentation":"","组织者":"0","twitter":"","allowAddToFavorites":"0","allowAddToAgenda":"0","votes":"0","url":"http://conference.phpbenelux.eu/","venueid ":"0"}}

有人知道为什么我没有时间在 Firefox 中显示 NaN:NaN 吗?

【问题讨论】:

    标签: javascript jquery google-chrome firefox


    【解决方案1】:

    不要使用Date(string) 构造函数,而是使用Date(milliseconds) 构造函数:http://www.w3schools.com/js/js_obj_date.asp

    原因是 Date(string) 将根据浏览器语言设置进行不同的解析。在您的情况下,它没有被 Firefox 解析(由于某些设置),因此是 NaN。当然,您还需要将内部存储表示更改为数字。

    使用获取当前时间:

    var time = (new Date()).getTime();
    

    稍后使用

    加载它
    var date = new Date(time);
    

    或者使用 moment.js :http://momentjs.com/docs/

    如果 starttime 格式为 2013-01-25 09:00:00,则需要使用

    var starttime = moment(item.starttime,"YYYY-MM-DD HH:mm:ss")
    

    结束时间类似。

    【讨论】:

    • 如何将我的日期转换为数字..?
    • 现在我这样做:var d = new Date(item.starttime); var 毫秒 = d.getTime() var d2 = 新日期(毫秒);变种年 = d2.getFullYear(); var 月 = d2.getMonth(); var day = d2.getDate(); var da = d2.getDay();但它仍然是相同的输出..
    • 你得到了 nan 一旦你做了var d = new Date(item.starttime) 之后的一切都无济于事。除非 starttime 是一个数字。
    • 我不能将 item.starttime 转换为数字吗?
    【解决方案2】:

    如果您不想更改日期在内部的存储方式,并且不介意包含外部库,moment.js 将在您提供格式的情况下为您正确解析这些字符串。请参阅有关解析 (http://momentjs.com/docs/#/parsing/string-format/) 和格式化 (http://momentjs.com/docs/#/displaying/format/) 的文档

    var d = new moment(item.starttime, "YYYY-MM-DD HH:mm:ss");
    // To get the date as 'Friday 25th January 2013'
    var datestring = d.format("dddd Do MMMM YYYY");
    // To get the time as '09:30'
    var timestring = d.format("HH:mm");
    

    【讨论】:

    • @user1775531 没问题,很高兴能帮上忙!
    【解决方案3】:

    另一个与 chrom 无关的问题

    // 12:00 instead of 12:0
    if(min_starttime < 10) min_starttime += "0"; 
    

    当时间为1 时会发生什么?你会得到10

    【讨论】:

      【解决方案4】:

      根据MDN,'yyyy-MM-dd HH:mm:ss' 不是有效的日期格式,因为它接受 RFC2822 和 ISO 8601 格式。不是 Firefox 坏了,只是 Chrome 更宽容一些。 要在 Firefox 中解决此问题,请使用此格式“2013-01-25T09:00:00”。

      【讨论】:

        【解决方案5】:

        您的时间字符串可以通过将日期部分后面的空格替换为“T”来调整以在 Firefox 中工作, 并在末尾附加一个“Z”。这也适用于现代 webkit && IE9+ 浏览器。

        旧版 IE 需要更多...

        var starttime='2013-01-25 12:30:00';
        if(starttime.indexOf('Z')==-1)starttime=starttime.replace(' ','T')+'Z';
        
        var date=new Date(starttime)
        
        date.toUTCString()
        /*  returned values: 
        Firefox 20.0: Fri, 25 Jan 2013 12:30:00 GMT
        Chrome 26.0.1410.64: Fri, 25 Jan 2013 12:30:00 GMT
        MSIE 10.0: Fri, 25 Jan 2013 12:30:00 UTC
        Opera 12.12: Fri, 25 Jan 2013 12:30:00 GMT
        */
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-24
          • 2017-12-10
          • 1970-01-01
          • 2013-06-09
          • 2018-08-29
          相关资源
          最近更新 更多