使用jQuery获取照片Feed中唯一值的时差

时间:2013-11-27 07:53:45

标签: jquery html time timestamp converter

我正在使用动态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。因此,第一个图像将具有正确的时间值,但其余图像将继承相同的精确值,而不是获取其自己的唯一值。我意识到解决方案可能会在某个地方抛出(这个),但我很难过。

1 个答案:

答案 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上的浏览器和文化设置保持警惕并导致问题。