我正在尝试将timeago (source)与datejs一起使用,但它不工作。下面是我期望工作的一些示例代码(假设加载了timeago和datejs ):
>>> d = new Date()
Mon Jun 21 2010 13:24:37 GMT-0400 (EST) { _orient=1, more...}
>>> d.toISOString() // datejs.toISOString
"2010-06-21T17:24:37.501Z" // this is a valid ISO8601 string, I believe
>>> $.timeago(d.toISOString()) // this should work
"NaN years ago"我非常感谢任何关于这可能失败的原因的输入,以及如何修复或绕过这个问题。
谢谢。
布赖恩
发布于 2010-06-22 02:15:33
(我是Timeago的作者)
问题在于,datejs输出的ISO8601时间戳包含一个毫秒值。Timeago目前不支持这种详细的ISO8601时间戳;它只支持ISO8601规范的一个子集。
这已经不是我第一次听说这个问题了,是时候有一个补丁来解决这个问题了。我创建了一个issue to track this。期待即将推出的Timeago版本。可能是v0.9。
现在有了一个新版本的 (v0.9),它支持时间戳中的毫秒。Download it here。这是relevant commit。
发布于 2010-06-22 01:46:42
我对jquery.timeago.js做了以下补丁,它解决了这个问题:
diff -r 89cc78838c70 media/js/contrib/jquery.timeago.js
--- a/media/js/contrib/jquery.timeago.js Mon Jun 21 10:22:12 2010 -0400
+++ b/media/js/contrib/jquery.timeago.js Mon Jun 21 13:45:32 2010 -0400
@@ -87,8 +87,14 @@
datetime: function(elem) {
// jQuery's `is()` doesn't play well with HTML5 in IE
var isTime = $(elem).get(0).tagName.toLowerCase() == "time"; // $(elem).is("time");
- var iso8601 = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
- return $t.parse(iso8601);
+ var date_string = isTime ? $(elem).attr("datetime") : $(elem).attr("title");
+
+ // for use with datejs @ http://www.datejs.com/
+ if (typeof(Date.parse) == 'function') {
+ return Date.parse(date_string);
+ } else {
+ return $t.parse(date_string);
+ }
}
});https://stackoverflow.com/questions/3086954
复制相似问题