我的HTML中有四个字段。两个是datepicker字段(一个用于从最新到另一个用于到目前为止)。同样,另外两个是timepicker字段(一个用于from-time,另一个用于to-time)。
<input type="text" id="from-datepicker"/>
<input class="timepicker" name="timepicker" id="from-timepicker"/>
<input type="text" id="to-datepicker"/>
<input class="timepicker" name="timepicker" id="to-timepicker"/>
日期以yyyy-mm-dd格式显示和使用,而时间格式为24小时制,如23:45:52。
现在,我只想知道如何计算两个时间戳之间的时差,以便区别
20 Oct 2015 11:00:00
和28 Oct 2015 13:15:00
将返回7 days 2 hours and 15 minutes
我知道如何在JavaScript中获取两个日期之间的差异,但是有没有使用时间戳提供差异的库?
答案 0 :(得分:2)
这是我使用的功能。只需修改输出即可删除&#34;前&#34;部分。也许更改client_time和server_time可以更好地描述您的特定用途。
实际上,可能会按照一般格式为您的特殊需要添加另一个if / else。
Pub.prettyTime = function (server_time) {
var MINUTE = 60, // 000060 seconds in a minute
HOUR = 3600, // 003600 seconds in an hour
DAY = 43200, // 43,200 seconds in a day
NORMALIZE = 1000, // 00.001 seconds in a millisecond, flipped due to the .1 inaccuracy rule
// Date.now() is in milliseconds so divide by 1000, to get client_time in seconds
// this way client time and server time have the same units for comparison
// this is UTC time
client_time = Math.round(Date.now() / NORMALIZE),
rounded_time,
elapsed_time,
string = '';
// here we ensure we never get a negative elapsed time
// because clients are not synched to the server
// in the case of negative elapsed time, the server is ahead of the client
// and we will jus say "just a second ago"
if (client_time < server_time) {
client_time = server_time;
}
elapsed_time = (client_time - server_time);
// create the output string
if (elapsed_time === 0) {
string = ' just a second ago';
// 0 to 1 minute ago
} else if ((elapsed_time > 0) && (elapsed_time < MINUTE)) {
string = (elapsed_time === 1) ? 'one second ago' :
(elapsed_time + ' seconds ago');
// 1 minute to 1 hour ago
} else if ((elapsed_time >= MINUTE) && (elapsed_time < HOUR)) {
rounded_time = Math.floor(elapsed_time / MINUTE);
string = (rounded_time === 1) ? 'one minute ago' :
(rounded_time + ' minutes ago');
// 1 hour to to 1 day ago
} else if ((elapsed_time >= HOUR) && (elapsed_time < DAY)) {
rounded_time = Math.floor(elapsed_time / HOUR);
string = (rounded_time === 1) ? 'one hour ago' :
(rounded_time + ' hours ago');
// more than 1 day ago
} else if ((elapsed_time >= DAY)) {
rounded_time = new Date(server_time * NORMALIZE);
string = 'on ' + rounded_time.toLocaleDateString();
}
return string;
};
此外,您可以将问题上方的格式插入构造函数中以获取规范化时间戳 - var d2 = new Date("28 Oct 2015 13:15:00")
,最后应用d2.valueOf()
来获取unix时间戳。您还可以使用日期( d2 - d1 )
的差异。
使用此信息。你应该能够实现你所需要的。
答案 1 :(得分:1)