时间秀Nan:Nan在Firefox中,Chrome工作完美

时间:2013-04-26 11:31:57

标签: javascript jquery google-chrome firefox

这是我在Google Chrome中的输出: enter image description here

这是我在Firefox中的输出: enter image description here

这是我的功能:

    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”, “事件ID”: “5588”, “订单”: “0”,“名称“:”基于REST   使用ZF2轻松完成服务“,”描述“:”需要了解ZF2?   并实现这些功能。“,”starttime“:”2013-01-25   09:00:00“,”endtime“:”2013-01-25 12:30:00“,”发言人“:”Matthew Weier   O'Phinney,Rob Allen“,”位置“:”教程   室 “ ”的azazaz“: ”0“, ”XPOS“: ”0.000000“, ”ypos“: ”0.000000“, ”地图类型“: ”计划“, ”IMAGEURL“: ”“, ”演讲“: ”“,”组织者 “:” 0" , “微”: “”, “allowAddToFavorites”: “0”, “allowAddToAgenda”: “0”, “内容”: “0”, “URL”: “http://conference.phpbenelux.eu/”, “venueid”: “0”}}

有没有人知道为什么我没有在firefox中获得时间并显示NaN:NaN?

5 个答案:

答案 0 :(得分:9)

如果您不想更改内部存储日期的方式,并且不介意包含外部库,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");

答案 1 :(得分:3)

使用Date(string)构造函数代替使用Date(milliseconds)构造函数:http://www.w3schools.com/js/js_obj_date.asp

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

使用以下方式获取当前时间:

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

稍后使用

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

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

Iff starttime的格式为2013-01-25 09:00:00,您需要使用

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

类似于终结时间。

答案 2 :(得分:3)

根据MDN,'yyyy-MM-dd HH:mm:ss'不是有效的日期格式,因为它接受RFC2822和ISO 8601格式。并不是说Firefox被打破了,只是Chrome有点宽容。 要在Firefox中修复此情况,请使用以下格式“2013-01-25T09:00:00”。

答案 3 :(得分:3)

通过将日期部分后面的空格替换为“T”,可以调整时间字符串以在firefox中工作, 并在末尾加上'Z'。这也适用于现代webkit&amp;&amp; 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
*/

答案 4 :(得分:0)

另一个与chrom无关的问题

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

时间为1时会发生什么?您将获得10