我已经编写了一些JavaScript来计算两个日期之间的差异,从twitter流中,然后将其等同于特定值 - 例如'Seconds ago','x days ago'..... p>
我在这里创建了一个小提琴,演示了我所做的:http://jsfiddle.net/meAEe/3/
但结果总是等于'0天前'。
任何人都可以帮我找出原因吗?
答案 0 :(得分:2)
每个else
语句之间需要if
。
现在它会在匹配的第一个语句之后进入每个if
语句。如果时间不到一小时,也不到两小时,不到一天,不到两天,不到一年。每一个都将替换前一个,所以你只看到最后一个。
答案 1 :(得分:1)
您的代码中存在逻辑错误。最后一个if语句将始终执行,因为您没有使用else if
连接if语句,这将导致程序执行在其中一个条件匹配时丢失。
答案 2 :(得分:1)
您的代码运行正常。如果你查看你的代码
var rightNow = new Date("Wed, 21 Dec 2011 13:05:09 +0000");
var then = new Date("Tue, 20 Dec 2011 19:05:09 +0000");
差异小于24小时,给出0天。
我已经把
var then = new Date("Mon, 19 Dec 2011 19:05:09 +0000");
它给出了1天前
答案 3 :(得分:0)
为什么不使用插件?有很多用JavaScript编写的。这是一个用jQuery编写的甜蜜文章。
答案 4 :(得分:0)
您需要将if
更改为else if
s(当然除了第一个)。现在他们每次都被评估。
答案 5 :(得分:0)
除了一些编程细节之外,您的问题在于使用Math.floor
函数。
根据:http://www.w3schools.com/jsref/jsref_floor.asp
Math.floor实际上返回最近的整数,在本例中为0,因为结果为0.75。
答案 6 :(得分:0)
那是因为你这样做:Math.floor(diff / day);
diff / day
的结果是0.75
。如果你向下舍入,那就是0
。如果您更改日期,您会发现您的代码运行正常。