减去日期 Javascript

Subtracting dates Javascript

我一直在尝试将我的时间戳格式化为 facebook/twitter 样式,它显示 1 秒、1 天、1 个月、1 年等等。但是由于某种原因,它没有返回正确的值,我不确定为什么?

下面我复制了我正在使用的代码,并制作了两个减去日期的示例。

如果有人能帮助我并指出问题以及我在显示正确值时出错的地方,那就太好了。

// Returned Result 
$("#TimeFormatted").append("Not divided by 1000: " + FormatTimeAgo(SubtractDates("1432215738000")));
$("#TimeFormatted2").append("Divided by 1000: " + FormatTimeAgo(SubtractDates2("1432215738000")));

function FormatTimeAgo(milliseconds)
{

    function numberEnding (number) {
        return (number > 1) ? 's' : '';
    }

    var temp = Math.floor(milliseconds / 1000);
    var years = Math.floor(temp / 31536000);

    // Years ago
    if (years) {
        return years + ' year' + numberEnding(years);
    }
    
    // Days ago
    var days = Math.floor((temp %= 31536000) / 86400);
    if (days) {
        return days + ' day' + numberEnding(days);
    }

    // Hours ago
    var hours = Math.floor((temp %= 86400) / 3600);
    if (hours) {
        return hours + ' hour' + numberEnding(hours);
    }

    // Minutes ago
    var minutes = Math.floor((temp %= 3600) / 60);
    if (minutes) {
        return minutes + ' minute' + numberEnding(minutes);
    }

    // Seconds ago
    var seconds = temp % 60;
    if (seconds) {
        return seconds + ' second' + numberEnding(seconds);
    }

    return 'less than a second'; //'just now' //or other string you like;
}

function SubtractDates(databaseTime)
{
    // Current time
    var date = new Date().getTime();

    // Database value
    var mysqlDate = new Date(databaseTime);
    var getMYSQLDate = mysqlDate.getTime();
    
    // Subtract dates
    var subtractDates = date - getMYSQLDate;

    return subtractDates;
}

function SubtractDates2(databaseTime)
{
    // Current time
    var date = new Date().getTime();

    // Database value
  
    var mysqlDate2 = new Date(databaseTime / 1000);
    var getMYSQLDate2 = mysqlDate2.getTime();
  
    // Subtract dates
    var subtractDates2 = date - getMYSQLDate2;

    return subtractDates2;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<div id="TimeFormatted"></div>

<div id="TimeFormatted2"></div>

提前致谢!

我现在觉得有点傻,因为我已经回答了我自己的问题。我忘了做

Math.floor((减去时间) / 1000);

function SubtractDates(databaseTime)
{
    // Current time
    var date = new Date().getTime();

    // Database value
    var mysqlDate = new Date(databaseTime / 1000);
    var getMYSQLDate = mysqlDate.getTime();

    // Subtract dates FIXED
    var SubtractDates = Math.floor((date - getMYSQLDate) / 1000) ;

    return SubtractDates;
}

克里斯-

查看似乎可以回答您的实际问题的帖子:

计算器溢出:Convert a Unix timestamp to time in Javascript

作为毫秒计算的替代方案,请考虑利用 Date 对象的强大功能。当你减去两个日期值时,你剩下的是自 1970 年 1 月 1 日以来经过的时间。然后你只需要将年份偏移 -1970 并将日期偏移 -1 ...你就得到了你想要的信息。

正如 Ivan Sivak 指出的那样,日期很难处理......尤其是当您处理世界时区和季节性时间变化时。这就是 moment.js 有用的时候。

无论如何,如果您想了解不同的方法,这里还有更多代码供您试验:

<!doctype html>
<html>
<body>
<div id="stdout"></div>

<script type="text/javascript">

var startDate = new Date( 1432215738000 );

setInterval( 
    function() {
        var t = new Date( new Date() - startDate ); 
        document.getElementById('stdout').innerHTML = (
            'year=' + ( t.getUTCFullYear() - 1970) + 
            ' day=' + (t.getUTCDate() - 1) + 
            ' hour=' + t.getUTCHours() + 
            ' minute=' + t.getUTCMinutes() + 
            ' seconds=' + t.getUTCSeconds()
        );
    }, 
    1000
);
</script>
</body>
</html>