我已经编写了一些JavaScript来计算两个日期之间的差异,然后将其等同于特定的值 - 例如'Seconds ago','x days前” .....计算两个日期之间传递的时间量
我创建了一个小提琴这里展示我做了什么:http://jsfiddle.net/meAEe/3/
但是结果总是等于‘0天前’。
任何人都可以帮我找出原因吗?
我已经编写了一些JavaScript来计算两个日期之间的差异,然后将其等同于特定的值 - 例如'Seconds ago','x days前” .....计算两个日期之间传递的时间量
我创建了一个小提琴这里展示我做了什么:http://jsfiddle.net/meAEe/3/
但是结果总是等于‘0天前’。
任何人都可以帮我找出原因吗?
您需要每个if
语句之间的else
。
现在它将进入每个if
声明后的第一个匹配。如果时间少于一个小时,它也少于两小时,少于一天,少于两天,少于一年。每个人都会替换上一个,所以你只能看到最后一个。
为什么不使用插件呢?它们中有很多用JavaScript编写。这是用jQuery编写的一个甜蜜的文章。
你在你的代码中的逻辑错误。最后一条if语句将始终执行,因为您没有使用else if
连接您的if语句,一旦条件匹配,这会导致程序执行中断。
您需要将if
s变为else if
s(当然除了第一个)。现在他们每次都被评估。
除了一些编程细节,你的问题在于使用Math.floor
函数。
据:http://www.w3schools.com/jsref/jsref_floor.asp
Math.floor实际上返回最接近的整数,在这种情况下是0,因为其结果是0.75。
这是因为你这样做:Math.floor(diff/day);
diff/day
的结果是0.75
。如果你把它放下,那就是0
。如果你改变日期,你会发现你的代码工作得很好。
你的代码工作正常。如果你看看你的代码
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天前
结果是正确的,但它不是想要的结果。如果差异小于一整天,则应以较低的分辨率显示,如小时或分钟。 – Guffa
请张贴的问题在您的代码。 –