我正在使用动态Feed,它可以提取最近上传的照片以及发布时间的时间戳。目前,时间戳以毫秒为单位。我有一个脚本,从当前时间的整数值中减去发布的时间戳值。然后它将剩余的整数值格式化为时间字符串。最终产生一串“...张贴x分钟前”(其中x是时间上的差异)。见下面的JS:
function toSeconds(time_str) {
// Extract hours, minutes and seconds
var parts = time_str.split(':');
return parts[0] * 3600 +
parts[1] * 60 +
+
parts[2]; // seconds
}
//GETS CURRENT EPOCH VALUE & CONVERTS TO TIME STRING
var d = new Date();
var currentEpoch = (d.getTime()-d.getMilliseconds())/1000;
var currentTime = new Date(currentEpoch *1000);
var currentDate = currentTime.toLocaleTimeString({hour12: false});
//GETS EPOCH VALUE OF POST & CONVERTS TO TIME STRING
var postEpoch = $(".timestamp").html();
var postTime = new Date(postEpoch *1000);
var postDate = postTime.toLocaleTimeString({hour12: false});
//GETS THE DIFFERENCE
var difference = Math.abs(toSeconds(currentDate) - toSeconds(postDate));
//FORMAT THE DIFFERENCE
var result = [
Math.floor(difference / 3600)
Math.floor((difference % 3600) / 60)
];
result = result.map(function(v) {
return v < 10 ? '0' + v : v;
}).join(':');
//INJECT DIFFERENCE INTO TIMESTAMP DIV
$(".timestamp").html("posted" + result + " minutes ago");
每个图像都包含在自己的div中,并且每个时间戳都有一个嵌套的div。请参阅示例HTML:
<div class="imgContainer">
<img>
<div class="timestamp">1385537546</div>
</div>
<div class="imgContainer">
<img>
<div class="timestamp">1385536903</div>
</div>
<div class="imgContainer">
<img>
<div class="timestamp">1385537273</div>
</div>
我的脚本似乎正常工作,但问题是此功能仅适用于第一个时间戳div。因此,第一个图像将具有正确的时间值,但其余图像将继承相同的精确值,而不是获取其自己的唯一值。我意识到解决方案可能会在某个地方抛出(这个),但我很难过。
答案 0 :(得分:0)
我从插件中了解到你可以这样做:
1.使用
mock(true / false) - 在不将图像插入DOM的情况下获取数据。使用 成功回调。
和
success(function) - Instagram返回时调用的回调函数 有效数据。将JSON数据作为对象参数。
所以基本上我覆盖了每个图像的默认渲染,并插入了一个自定义项目。
您可以阅读更多相关信息HERE
的的Javascript 强>
var feed = new Instafeed({
pages: 1,
limit: 5,
get: 'tagged',
tagName: 'thetypein',
clientId: '467ede5a6b9b48ae8e03f4e2582aeeb3',
mock: true,
success: function (json) {
for (var i = 0; i < json.data.length; i++) {
var cont = $("<div>")
.addClass("imgContainer")
.appendTo($("#instafeed"));
var img = $("<img>")
.attr("src", json.data[i].images.thumbnail.url)
.appendTo(cont);
var time = $("<div>")
.addClass("timestamp")
.attr("id", "Time_" + (i + 1))
.text("Added " + CountTime(json.data[i].created_time)+" minutes ago")
.appendTo(cont);
}
}
});
feed.run();
此外,我已修改您的功能,以便正确使用它并修复您的toSeconds
功能:
的的Javascript 强>
function CountTime(posttime) {
function toSeconds(time_str) {
// Extract hours, minutes and seconds
time_str= time_str.replace("AM","").replace("PM",""); // added to get rid of "AM" and "PM"
var parts = time_str.split(':');
return parts[0] * 3600 +
parts[1] * 60 +
+
parts[2]; // seconds
}
var d = new Date();
var currentEpoch = (d.getTime()-d.getMilliseconds())/1000;
var currentTime = new Date(currentEpoch *1000);
var currentDate = currentTime.toLocaleTimeString({hour12: false});
console.log(currentDate);
var postEpoch = posttime;
var postTime = new Date(postEpoch *1000);
var postDate = postTime.toLocaleTimeString({hour12: false});
console.log(postDate);
var difference = Math.abs(toSeconds(currentDate) - toSeconds(postDate));
console.log(toSeconds(postDate));
var result = [
Math.floor(difference / 3600),
Math.floor((difference % 3600) / 60)
];
result = result.map(function(v) {
return v < 10 ? '0' + v : v;
}).join(':');
return result;
};
以下是Fiddle
的示例更新1
在与Bharath Rallapalli和一项小型研究讨论后,我发现你应该阅读更多关于toLocaleTimeString()的内容,因为它可以根据用户PC上的浏览器和文化设置保持警惕并导致问题。