使用 Javascript 在 Mozilla 和 IE 中返回 NaN 的日期
Date Returning NaN In Mozilla and IE With Javascript
目前,我一直在测试我在不同浏览器中的时间功能。我只是抓取一个 MySql 时间戳并将其转换为 Unix 时间,问题是它在 Mozilla 或 Internet Explorer 中不起作用!
问题是当我调用这行代码时我认为:
var unixtime = new Date(timestamp).getTime() / 1000;
而 timestamp
会是这样的:2015-07-28 08:55:53
(例如)。
我调用的所有其他行似乎都工作得很好,而且,这在 Chrome 中工作。那么为什么这段代码不能在 Mozilla 和 IE 中运行?
这是我的完整代码:
function addS(value) {
if (value == 1) {
var string = "";
}
else {
var string = "s";
}
return string;
}
function timeago(timestamp) {
var unixtime = new Date(timestamp).getTime() / 1000;
var unixtimenow = new Date().getTime() / 1000;
var timediff = unixtimenow - unixtime;
var timediffmins = Math.round(timediff / 60);
var timediffhours = Math.round(timediffmins / 60);
var timediffdays = Math.round(timediffhours / 24);
var timediffweeks = Math.round(timediffdays / 7);
var timediffmonths = Math.round(timediffweeks / 4);
var timediffyears = Math.round(timediffmonths / 12);
var value = null;
if (timediff < 60) {
value = "a moment";
}
else if (timediffmins < 60) {
value = timediffmins + " minute" + addS(timediffmins);
}
else if (timediffhours < 24) {
value = timediffhours + " hour" + addS(timediffhours);
}
else if (timediffdays < 7) {
value = timediffdays + " day" + addS(timediffdays);
}
else if (timediffweeks < 4) {
value = timediffweeks + " week" + addS(timediffweeks);
}
else if (timediffmonths < 12) {
value = timediffmonths + " month" + addS(timediffmonths);
}
else {
value = timediffyears + " year" + addS(timediffyears);
}
return value;
}
timeago(data[k]["datecreated"]) + " ago";
很简单,我的问题是,为什么这不适用于所有浏览器?
来自 MDN 上的 Date:
new Date(dateString);
String value representing a date. The string should be in a format
recognized by the Date.parse() method (IETF-compliant RFC 2822
timestamps and also a version of ISO8601).
来自 MDN 上的 Date.parse():
A string representing an RFC2822 or ISO 8601 date (other formats may
be used, but results may be unexpected).
(粗体是我的)
RFC2822 格式日期示例:
Mon, 25 Dec 1995 13:30:00 GMT
ISO 格式示例:
2011-10-10
2011-10-10T14:48:00
您的日期不是这两种格式之一,因此浏览器行为未定义。
尝试按照标准格式化您的字符串,或者解析它并使用构造函数:
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);
目前,我一直在测试我在不同浏览器中的时间功能。我只是抓取一个 MySql 时间戳并将其转换为 Unix 时间,问题是它在 Mozilla 或 Internet Explorer 中不起作用!
问题是当我调用这行代码时我认为:
var unixtime = new Date(timestamp).getTime() / 1000;
而 timestamp
会是这样的:2015-07-28 08:55:53
(例如)。
我调用的所有其他行似乎都工作得很好,而且,这在 Chrome 中工作。那么为什么这段代码不能在 Mozilla 和 IE 中运行?
这是我的完整代码:
function addS(value) {
if (value == 1) {
var string = "";
}
else {
var string = "s";
}
return string;
}
function timeago(timestamp) {
var unixtime = new Date(timestamp).getTime() / 1000;
var unixtimenow = new Date().getTime() / 1000;
var timediff = unixtimenow - unixtime;
var timediffmins = Math.round(timediff / 60);
var timediffhours = Math.round(timediffmins / 60);
var timediffdays = Math.round(timediffhours / 24);
var timediffweeks = Math.round(timediffdays / 7);
var timediffmonths = Math.round(timediffweeks / 4);
var timediffyears = Math.round(timediffmonths / 12);
var value = null;
if (timediff < 60) {
value = "a moment";
}
else if (timediffmins < 60) {
value = timediffmins + " minute" + addS(timediffmins);
}
else if (timediffhours < 24) {
value = timediffhours + " hour" + addS(timediffhours);
}
else if (timediffdays < 7) {
value = timediffdays + " day" + addS(timediffdays);
}
else if (timediffweeks < 4) {
value = timediffweeks + " week" + addS(timediffweeks);
}
else if (timediffmonths < 12) {
value = timediffmonths + " month" + addS(timediffmonths);
}
else {
value = timediffyears + " year" + addS(timediffyears);
}
return value;
}
timeago(data[k]["datecreated"]) + " ago";
很简单,我的问题是,为什么这不适用于所有浏览器?
来自 MDN 上的 Date:
new Date(dateString);
String value representing a date. The string should be in a format recognized by the Date.parse() method (IETF-compliant RFC 2822 timestamps and also a version of ISO8601).
来自 MDN 上的 Date.parse():
A string representing an RFC2822 or ISO 8601 date (other formats may be used, but results may be unexpected).
(粗体是我的)
RFC2822 格式日期示例:
Mon, 25 Dec 1995 13:30:00 GMT
ISO 格式示例:
2011-10-10
2011-10-10T14:48:00
您的日期不是这两种格式之一,因此浏览器行为未定义。
尝试按照标准格式化您的字符串,或者解析它并使用构造函数:
new Date(year, month[, day[, hour[, minutes[, seconds[, milliseconds]]]]]);