使用时间戳获取两个不同日期之间的时差?

时间:2016-05-09 20:46:05

标签: javascript html datepicker timepicker timestampdiff

我的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:0028 Oct 2015 13:15:00将返回7 days 2 hours and 15 minutes

我知道如何在JavaScript中获取两个日期之间的差异,但是有没有使用时间戳提供差异的库?

2 个答案:

答案 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)

您可以使用momentjs

检查文档中的substract部分。