我有一个带有liveticker的网站,它加载新的论坛事件并将它们添加到HTML表中。
对于时间字段,我使用ajax加载每个事件的日期时间(例如2013-02-15 17:28:03
),并通过jquery插件cutetime将其转换为人类可读的格式,例如22 minutes ago
。
CuteTime的问题是,最近的版本(从2010年开始)在处理动态加载的AJAX数据时存在一些问题。
我的当前解决方案似乎有点奏效:
1.首先ajax调用将整个论坛事件加载为html表,然后我分配cutetime插件:
// initial load at page startup
$('#responsecontainer').load('./liveticker', {ajax:1}, function() {
// convert datetime to readable date format
$('.timestamp').cuteTime();
});
2.然后我每30秒检查一次新事件,并在加载的数据上每次分配cuteTime:
$('#responseEvents').load('./liveticker', {ajax:lastevent}, function() {
// stuff...
// convert datetime to readable date format
$('.timestamp').cuteTime();
})
这似乎适用于Firefox和Chrome。但是,在InternetExplorer9中,所有$(.timestamp)
元素都会分配相同的文本:just now
。
有人知道这个bug/问题的解决方案吗?
--
注意:在cutetime网站上,我发现了一条关于ajax的评论。有人说了他的变通办法:
我不得不破解我的应用程序来制作额外的字段,所以我首先复制了所有字段将值输入到我的所有跨度中,然后调用cuteTime。
但我不确定这是否与我现在面临的Internet Explorer Bug有关。。。
这不是AJAX调用。事实上,我使用了普通的日期时间格式(来自mysql),并尝试用cutetime转换该格式。
在阅读开发者的网站时,我偶然发现了这句话:
时间戳必须是有效的Date()。解析"able"格式的
以及:
如果既不存在cutetime属性也不存在有效的对象文本,则假定时间戳为"now"。
宾果!现在我正在用将日期时间格式化为ISO8601日期格式服务器站点
$timeCode = date("c", strtotime( $row['datetime'] ));
我得到的日期格式是:2013-02-17T15:26:21+01:00
,它适用于所有浏览器中的js转换!