这是我在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”, “事件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?
答案 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
。